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

合并两个排序的链表

时间:2023-05-05 13:45:01浏览次数:42  
标签:pre ListNode val 合并 next 链表 pHead1 排序

  • 描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
  数据范围: 0≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度 O(n)
  如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6}  
  • 示例1
输入:{1,3,5},{2,4,6} 返回值:{1,2,3,4,5,6}  
  • 示例2
输入:{},{} 返回值:{}  
  • 算法思想
先进行特殊情况的判断,若有一个链表为空,则返回另一个链表。 然后再判断哪个链表的头结点的值小,将头结点值大的链表合并至头结点值小的链表当中。 最后,若头结点值小的链表已到尾部,而头结点值大的链表仍有元素,就将剩下元素直接放到目标链表的尾部,并返回相应的目标链表。  
  • 代码
 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10   public:
11     ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
12         ListNode* pre = nullptr;
13         ListNode* p = pHead1;
14         ListNode* q = pHead2;
15         //特殊情况判断
16         if(pHead1==nullptr)  return pHead2;
17         if(pHead2==nullptr)  return pHead1;
18         //L2合并至L1
19         if (q->val >= p->val) {
20             while (p && q) {
21                 if (q->val >= p->val) {
22                     pre = p;
23                     p = pre->next;
24                 } else {
25                     ListNode* r = q->next;
26                     q->next = p;
27                     pre->next = q;
28                     pre = q;
29                     q = r;
30                 }
31             }
32 
33             if (q) {
34                 pre->next = q;
35             }
36             return pHead1;
37         } else {          //L1合并至L2
38             while (p && q) {
39                 if (p->val >= q->val) {
40                     pre = q;
41                     q = pre->next;
42                 } else {
43                     ListNode* r = p->next;
44                     p->next = q;
45                     pre->next = p;
46                     pre = p;
47                     p = r;
48                 }
49             }
50             if (p) {
51                 pre->next = p;
52             }
53             return pHead2;
54         }
55     }
56 };

 

标签:pre,ListNode,val,合并,next,链表,pHead1,排序
From: https://www.cnblogs.com/yueshengd/p/17373877.html

相关文章

  • 6-2 数组排序输出(函数模板)
    对于输入的每一批数,按从小到大排序后输出。一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束),第二个输入为该批数的数量size(0<size<=10),接下来为size个指定类型的数据。输出将从小到大顺序输出数据。函数接口定义:sor......
  • 力扣141(Java)-环形链表(简单)
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递 。仅仅是为了标识......
  • ds:带头结点的单链表与不带头结点的单链表区别
     写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。 一、带头结点的单链表头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据初始化:malloc申请空间后要L->next=NULL......
  • 十大排序算法
    0、算法分类十种常见排序算法可以分为两类比较类排序通过比较来决定元素间的相对次序,时间复杂度为O(nlogn)~O(n²)非比较类排序不通过比较来决定元素间的相对次序,其时间复杂度可以突破O(nlogn),以线性时间运行名次解释:时间/空间复杂度:描述一个算法执行时间/占用空......
  • 建立链表
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct_link{intval;structval*next;}Link;Link*Build(){intval;Link*head=NULL,*tail=NULL,*cur=NULL;//头......
  • python字典合并
    两个Python字典可以通过多种方式进行合并:使用update()方法:使用update()方法将一个字典中的键值对添加到另一个字典中,如果存在相同的键,则更新对应的值。dict1={'a':1,'b':2}dict2={'b':3,'c':4}dict1.update(dict2)print(dict1)#输出{'a':1,'b'......
  • 数组排序输出(函数模板)
    一、问题描述:对于输入的每一批数,按从小到大排序后输出。一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束),第二个输入为该批数的数量size(0<size<=10),接下来为size个指定类型的数据。输出将从小到大顺序输出数据。函......
  • C++黑马程序员——P251-254. 常用排序算法 sort,random_shuffle,merge,reverse
    P251.常用排序算法——sortP252....——random_shuffleP253....——mergeP254....——reverseP251.sort  1#include<iostream>2#include<vector>3#include<algorithm>4#include<functional>//用greater5usingnamespacest......
  • 面试题 02.07(Java). 链表相交(简单)
    题目:本题与:力扣160相交链表一致给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构......
  • 链表的基本操作
    classListNode{val:numbernext:ListNode|nullconstructor(val?:number,next?:ListNode|null){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}}/***数组转链表*@paramarr*@paraminde......