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 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
Jan 26 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
Mar 03 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
Oct 27 Javascript
JS 数组基本用法入门示例解析
Jan 16 Javascript
vue 自定义组件的写法与用法详解
Mar 04 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
js href的用法
2010/05/13 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
js实现消息滚动效果
2017/01/18 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
用Python编写简单的微博爬虫
2016/03/04 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Python中的With语句的使用及原理
2020/07/29 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
小学敬老月活动方案
2014/02/11 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
环保宣传标语
2014/06/12 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2015年保管员工作总结
2015/04/30 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python代码风格与编程习惯重要吗?
2021/06/03 Python
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android
js 实现验证码输入框示例详解
2022/09/23 Javascript
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android