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模板技术
Apr 27 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 Javascript
网页中的图片的处理方法与代码
Nov 26 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
更换select下拉菜单背景样式的实现代码
Dec 20 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
js点击返回跳转到指定页面实现过程
Aug 20 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 jQuery
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
浅谈vue 多个变量同时赋相同值互相影响
Aug 05 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调用Oracle存储过程的方法
2008/09/12 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python制作简易注册登录系统
2016/12/15 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python多维数组切片方法
2018/04/13 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
公休请假条
2014/04/11 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年保密工作总结
2014/11/22 职场文书
无保留意见审计报告
2015/06/05 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL