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
Feb 25 Javascript
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
javascript 正则表达式去空行方法
Jan 24 Javascript
JS实现瀑布流布局
Oct 21 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
Oct 29 jQuery
js装饰设计模式学习心得
Feb 17 Javascript
vue better scroll 无法滚动的解决方法
Jun 07 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 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
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
python实现文本文件合并
2015/12/29 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
Python实现简单的2048小游戏
2021/03/01 Python
年度考核自我评价
2014/01/25 职场文书
收银员岗位职责
2014/02/07 职场文书
出国签证在职证明
2014/09/20 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python