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 ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
AngularJs表单验证实例代码解析
Nov 29 Javascript
jquery插件锦集【推荐】
Dec 16 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 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上传文件的增强函数
2010/07/21 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP图片加水印实现方法
2016/05/06 PHP
js function定义函数使用心得
2010/04/15 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
vue组件间通信解析
2017/03/01 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
Python Django使用forms来实现评论功能
2016/08/17 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python实现停车管理系统
2018/11/30 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
简单介绍python封装的基本知识
2019/08/10 Python
Python连接字符串过程详解
2020/01/06 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
实习教师自我鉴定
2013/12/09 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
大学活动总结模板
2014/07/10 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
三八妇女节标语
2014/10/09 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
美容院员工规章制度
2015/08/05 职场文书