JS实现的合并两个有序链表算法示例


Posted in Javascript onFebruary 25, 2019

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

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

示例:

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

JS实现的合并两个有序链表算法示例

可以直接运行的方案:

<script>
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))
</script>

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

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

Javascript 相关文章推荐
关于js内存泄露的一个好例子
Dec 09 Javascript
Js与下拉列表处理问题解决
Feb 13 Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
Sep 05 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
js图片查看器插件用法示例
Jun 22 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 Javascript
JS实现判断有效的数独算法示例
Feb 25 #Javascript
js实现通过开始结束控制的计时器
Feb 25 #Javascript
js实现倒计时器自定义时间和暂停
Feb 25 #Javascript
JS module的导出和导入的实现代码
Feb 25 #Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 #Javascript
js实现网页同时进行多个倒计时功能
Feb 25 #Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 #Javascript
You might like
php的大小写敏感问题整理
2011/12/29 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
python的turtle库使用详解
2019/05/10 Python
Django获取应用下的所有models的例子
2019/08/30 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
pygame实现弹球游戏
2020/04/14 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
学校元旦晚会方案
2014/02/19 职场文书
房地产开发项目建议书
2014/05/16 职场文书
委托书怎么写
2014/07/31 职场文书
超市周年庆活动方案
2014/08/16 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
会议简讯范文
2015/07/20 职场文书
导游词之日本富士山
2020/01/06 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
基于Python实现流星雨效果的绘制
2022/03/18 Python
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android