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 load方法用法集锦
Dec 06 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
IE和Firefox之间在JavaScript语法上的差异
Apr 22 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
Jun 24 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
JavaScript实现图片切换效果
Aug 12 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
Aug 10 Javascript
小程序使用分包的示例代码
Mar 23 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 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
在php中取得image按钮传递的name值
2006/10/09 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php实现复制移动文件的方法
2015/07/29 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
最短的IE判断代码
2011/03/13 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
详解flask表单提交的两种方式
2018/07/21 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
妇联主席先进事迹
2014/05/18 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
会计求职自荐信范文
2015/03/04 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers