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 相关文章推荐
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
js 学习笔记(三)
Dec 29 Javascript
JavaScript中常见陷阱小结
Apr 27 Javascript
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
Oct 10 Javascript
微信小程序 本地数据读取实例
Apr 27 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
关于时间计算的结总
2006/12/06 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
php实现简单四则运算器
2020/11/29 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
python中with用法讲解
2020/02/07 Python
Python实现仿射密码的思路详解
2020/04/23 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
实习单位推荐信范文
2013/11/27 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
生物科学专业自荐书
2014/06/20 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
元宵节晚会主持词
2015/07/01 职场文书