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 相关文章推荐
由浅到深了解JavaScript类
Sep 08 Javascript
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
9个JavaScript评级/投票插件
Jan 18 Javascript
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
jQuery中slideUp()方法用法分析
Dec 24 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
angular十大常见问题
Mar 07 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
利用10行js代码实现上下滚动公告效果
Dec 08 Javascript
原生js调用json方法总结
Feb 22 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 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
基于mysql的论坛(4)
2006/10/09 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python概率计算器实例分析
2015/03/25 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python编写计算器功能
2019/10/25 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
假期安全教育广播稿
2014/10/04 职场文书
工作失职检讨书500字
2014/10/17 职场文书
出国留学英文自荐信
2015/03/25 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
Python Flask实现进度条
2022/05/11 Python
Nginx配置使用详解
2022/07/07 Servers