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调试说明
Jun 07 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
Feb 25 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
Vue组件中slot的用法
Jan 30 Javascript
js实现图片上传并预览功能
Aug 06 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
JS出现404错误原理及解决方案
Jul 01 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 网页过期时间的控制代码
2009/06/29 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
YII路径的用法总结
2014/07/09 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Django 连接sql server数据库的方法
2018/06/30 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
python实现控制台打印的方法
2019/01/12 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
django框架forms组件用法实例详解
2019/12/10 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
元旦晚会邀请函
2014/01/27 职场文书
大型晚会策划方案
2014/02/06 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
统计专业自荐书
2014/07/06 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
听课评课活动心得体会
2016/01/15 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
mysql数据库入门第一步之创建表
2021/05/14 MySQL
Golang中异常处理机制详解
2021/06/08 Golang
Python办公自动化PPT批量转换操作
2021/09/15 Python
vue里使用create, mounted调用方法
2022/04/26 Vue.js