首页 > 其他分享 >合并两个排序的链表

合并两个排序的链表

时间:2022-08-15 22:02:05浏览次数:65  
标签: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,排序,节点
From: https://www.cnblogs.com/xiayuxue/p/16589787.html

相关文章

  • Easy Fix (排序+树状数组+离线处理+找规律)
    题目:给定长度为n的排列p,令Ai表示i左边比pi小的数字个数,Bi表示i右边比pi小的数字个数,Ci=min(Ai,Bi)。有m次独立的询问,每次询问给定u和v,问如果交......
  • django ORM定义实现链表结构
    需求场景各种链表使用场景,如单串,双端链表等需求描述实现阶段间串联的可前进后退的关系模型逻辑分析节点间串联.主要需要控制的是前节点和后节点的顺序关系以及......
  • python 中实现按照 fasta文件的scaffold进行排序
     001、方法1root@PC1:/home/test#lsa.fastatest.pyroot@PC1:/home/test#cattest.py##测试程序#!/usr/bin/pythonin_file=open("a......
  • 力扣-刷题-324. 摆动排序 II
    题目链接来源:力扣(LeetCode)链接:https://leetcode.cn/problems/wiggle-sort-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目描述给你一个......
  • 包含两个对象的数组排序
    1vardata=[{name:19,age:28},{name:30,age:29}]2functioncreateComparisonFunction(propertyName){3returnfunction(object1,object2){4varv......
  • 力扣-88-合并两个有序数组
    本来觉得很简单,然后准备提交了发现要在数组1里面合并,没有额外空间然后就有了一个大胆的想法——我直接插进去然后sortclassSolution{public: voidmerge(vector<int>......
  • 由浅入深!一文带你彻底明白堆排序
    本文中所有的代码全都是大根堆!实现语言是Java图片来源都是这位大神的,大神的文章也给了我很多启发数据结构之堆堆排序这个视频通俗易懂从什么是堆,什么是堆化,再到实现......
  • 十大排序算法之【堆排序】
    堆排序代码://头文件省略voidheapify(vector<int>&in,intbottom,inttop){intlargest=top;intlson=top*2+1;intrson=top*2+1;if(lson......
  • python中实现字典的合并
     001、利用内置函数update实现>>>dict1={"a":100,"b":200}##测试字典1>>>dict1{'a':100,'b':200}>>>dict2={"c":300,"d":400}......
  • 1075 链表元素分类——25分
    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0,K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变......