本文实例讲述了JS实现的合并两个有序链表算法。分享给大家供大家参考,具体如下:

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4

输出:1->1->2->3->4->4

可以直接运行的方案:

function Node(element) {

this.element = element;//当前节点的元素

this.next = null;//下一个节点链接

}

function List() {

this.head = new Node("head");//头节点

this.find = find;//查找节点

this.insert = insert;//插入节点

this.remove = remove;//删除节点

this.display = display;//显示链表

this.findPrevious = findPrevious; //查找前一个节点

}

//下面的函数是操作方法:对应List类构造函数中的名称

//查找给定节点

function find(item) {

var currNode = this.head;

while(currNode.element != item) {

currNode = currNode.next;

}

return currNode;

}

//向链表插入一个节点

function insert(newElement,item) {

var newNode = new Node(newElement);

var current = this.find(item);

if(current == null)

return console.log("can't find the item");

newNode.next = current.next;

current.next = newNode;

}

//删除节点

function remove(item) {

var prevNode = this.findPrevious(item);

if(prevNode.next != null)

prevNode.next = prevNode.next.next;

}

//从链表中删除节点时,我们先要找个待删除节点的前一个节点,找到后,我们修改它的 next 属性,使其不在指向待删除的节点,而是待删除节点的下一个节点。那么,我们就得需要定义一个 findPrevious 方法遍历链表,检查每一个节点的下一个节点是否存储待删除的数据。如果找到,返回该节点,这样就可以修改它的 next 属性了。

//查找带删除节点的前一个节点

function findPrevious(item) {

var currNode = this.head;

while(currNode.next != null && currNode.next.element != item) {

currNode = currNode.next;

}

return currNode;

}

//显示链表元素

function display() {

var current = this.head;

while(current.next != null) {

console.log(current.next.element);

current = current.next;

}

}

/**

* @param {Node} l1

* @param {Node} l2

* @return {Node}

*/

var mergeTwoLists = function(l1, l2) {

// 模仿链表的数据结构

var mergedHead = { element : -1, next : null },

cur = mergedHead;

while (l1 && l2){

if(l1.element <= l2.element){

cur.next = l1;

l1 = l1.next;

}

else {

cur.next = l2;

l2 = l2.next;

}

cur = cur.next;

}

cur.next = l1 || l2

return mergedHead.next;

};

let list1 = new List();

list1.insert(1,'head');

list1.insert(2,1);

list1.insert(4,2);

console.log(list1.display());

let list2 = new List();

list2.insert(1,'head');

list2.insert(3,1);

list2.insert(4,3);

console.log(list2.display());

console.log(mergeTwoLists(list1.head,list2.head))

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码,查看运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

java合并两个有序链表_JS实现的合并两个有序链表算法示例相关推荐

  1. java求矩阵_java实现的n*n矩阵求值及求逆矩阵算法示例

    本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法.分享给大家供大家参考,具体如下: 先来看看运行结果: java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序: imp ...

  2. 【数据结构与算法】之深入解析“将有序数组转换为二叉搜索树”的求解思路与算法示例

    一.题目要求 给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡 二叉搜索树. 高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树. ...

  3. 两个无序单链表,排序后合并成一个有序链表

    两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中. #include<stdio.h> #includ ...

  4. java 合并算法思想_Java实现合并两个有序序列算法示例

    本文实例讲述了Java实现合并两个有序序列算法.分享给大家供大家参考,具体如下: 问题描述 输入:序列A,其中a0,其中b0 算法思想 创建一个长度为r的数组R,将A中的序列看作是两个有序序列 B=A ...

  5. 两个非递减有序单链表La和Lb合并成一个非递增有序链表Lc

    #include<iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> ...

  6. 有序链表和数组的合并

    一:链表的合并 思路分析1(双指针解法) 1:定义两个指针遍历l1,l2分别指向第一条链表的头结点list1和第二条链表的头结点list2: 2:定义一个空节点preNode,用于连接两条有序链表,定 ...

  7. Leetcode链表题目笔记2 合并两个排序的链表

    合并两个排序的链表:合并有序链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...

  8. python实现合并链表_python:16.合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解析 构建列表 # -*- coding:utf-8 -*- # class ListNode: ...

  9. C/C++面试题—合并两个排序的链表【递归和循环两种方式】

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表, 当然我们需要合成后的链表满足单调不减规则. 解题思路 这道题既可以采用递归的方式,也可以采用循环的方式. 2者的思路都是殊途同归的. 合并 ...

最新文章

  1. oracle主备库sync模式,Oracle 探索DG备库undo工作模式
  2. Centos-6.7下_Oracle 11gR2静默详细安装过程及排错
  3. Zabbix添加Ping外网IP监控
  4. datagridview java_仅更新datagridview中的一个单元格
  5. keras 修仙笔记一
  6. 内存地址对齐提升程序性能
  7. 如何root安卓手机_你的手机你做主!免 ROOT 卸载安卓手机预装APP
  8. 如何在SAP里创建configurable material物料主数据
  9. 电脑配置及价格_游戏主机推荐 AMD锐龙R52600X配RTX2060组装电脑配置清单及价格
  10. Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator
  11. PKU 学生的反馈 2009 –2
  12. Oracle中如何判断字符串是否全为数字
  13. 袁玉玮:简介人工智能在基金界的应用现状 (二)卖方交易员被冲击
  14. 使用FlyMcu ISP清除 STM32F411CE 芯片卡死
  15. 转:L298N的原理图以及程序实现
  16. usb声卡驱动_艾肯iCON ProDrive第三代USB声卡驱动全新发布!
  17. [转载]MySQL 中 char 与 varchar 能存多少汉字问题_-Chaz-_新浪博客
  18. 【FPGA教程案例61】硬件开发板调试1——初识FPGA开发板,通过verilog控制LED灯,按键开关等
  19. 「面向信仰编程」Draven 专访:像写代码一样,用树形的结构写文章
  20. MySQL函数关键字(五)子查询 ANY/SOME/ALL/IN/EXISTS/USING

热门文章

  1. 【渝粤教育】电大中专新媒体营销实务 (13)作业 题库
  2. 【渝粤教育】电大中专建设工程法规1作业 题库
  3. 【渝粤题库】广东开放大学 标准的研制与编制 形成性考核
  4. 【渝粤题库】国家开放大学2021春2625调剂学题目
  5. WIFI无线传输模块使用 ESP8266芯片方案接入云平台的方法
  6. java 80_【JavaWeb】80:js基础详解
  7. 【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数)
  8. php文件显示不完整,github文件显示不全
  9. win mysql 2003错误_windows MySql 报1067错误 2003错误
  10. python最短路径例子_Python实现的多叉树寻找最短路径算法示例