ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

合并两个排序的链表

2022-08-15 22:02:01  阅读:141  来源: 互联网

标签:current 合并 next 链表 pHead1 pHead2 排序 节点


目录

题目描述

题目地址:http://mtw.so/6r71s0
题目要求:输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0 ≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度O(n)

解题思路

  1. 创建新的空链表,来存放链表合并后的结果

  2. 创建哑(虚拟)节点
    在链表的操作中,添加一个哑节点(dummy node),让它的指针指向链表的头节 点,这样在删除节点的时候,就不需要再判断删除的是否是头结点了。

    • 好处:
      1. 省略头节点为空时的情况的判断;
      2. 头节点和其他节点进行同样的操作时,由于头节点没有前一个节点,需要对这种 情况进行单独判断,但加入虚拟节点以后,头节点就可以当作普通节点看待。
  3. 先两个链表的头结点进行对比,确定新链表的头结点

  4. 比较完,如果有链表有剩余节点,直接存放( 因为是递增链表,没有比较完的所有节点一定都比新链表大)

解题代码

function ListNode(x){
    this.val = x;
    this.next = null;
}
function Merge(pHead1, pHead2)
{
    // write code here
    let current = new ListNode();
     let dummy = current;
    while(pHead1 !== null && pHead2 !== null){
        if(pHead1.val < pHead2.val){
            current.next = pHead1;         //将小的节点存入新链表
            pHead1 = pHead1.next;
        }else{
            current.next = pHead2;
            pHead2 = pHead2.next;
        }
        current = current.next;       //存放完节点,移动新链表指针
    }

    if(pHead1 !== null){
        current.next = pHead1;
    }
    if(pHead2 !== null){
        current.next = pHead2;
    }
    //dummy在新链表之前,dummy.next才是完整链表
    return dummy.next;
}
module.exports = {
    Merge : Merge
};

标签:current,合并,next,链表,pHead1,pHead2,排序,节点
来源: https://www.cnblogs.com/xiayuxue/p/16589787.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有