首页 > 其他分享 >LeetCode21 合并两个有序链表

LeetCode21 合并两个有序链表

时间:2022-10-02 00:35:05浏览次数:77  
标签:ListNode val list1 nullptr next 链表 有序 LeetCode21

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

(注意给出的三个实例,第一次由于没有注意到另外两个实例,忘记考虑一个链表或两个链表为空的情况了)

 

idea:合并实际就是将一个链表插入另一个链表的过程,在这里我是以头结点值较小的作基准,让另一个插入进去

 

 

/**  * Definition for singly-linked list.  * struct ListNode {  *     int val;  *     ListNode *next;  *     ListNode() : val(0), next(nullptr) {}  *     ListNode(int x) : val(x), next(nullptr) {}  *     ListNode(int x, ListNode *next) : val(x), next(next) {}  * };  */ class Solution { public:     ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {         if(list1==nullptr && list2==nullptr)             return nullptr;         if(list1==nullptr || list2==nullptr)             return list1==nullptr ? list2 : list1;         ListNode* p= list1->val < list2->val ? list1 : list2;         ListNode* q= list1->val < list2->val ? list2 : list1;         while(q!=nullptr){             if(p==nullptr || p->next==nullptr){                 p->next=q;                 break;             }             if(q->val < p->next->val){                 ListNode* a=q;                 q=q->next;                 a->next=p->next;                 p->next=a;             }             else                 p=p->next;         }         return list1->val < list2->val ? list1 : list2;     } };   进阶: 递归: idea:这个属实没想到,而且看了代码还没看懂。理解了之后,发现就是将链表重新规划,从值较小的头结点开始,按顺序将另外两个链表头结点接上去,具体见盗来的图解,是真的清楚,看过就可以明白  

class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == nullptr) {
return l2;
} else if (l2 == nullptr) {
return l1;
} else if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:ListNode,val,list1,nullptr,next,链表,有序,LeetCode21
From: https://www.cnblogs.com/Ting-LOVE/p/16748068.html

相关文章

  • Java中队列和链表性能对比-ArrayList和LinkedList
    本文使用ArrayList和LinkedList,分别对比了队列链表的add,get的性能。 具体代码如下,可以直接运行importjava.util.ArrayList;importjava.util.LinkedList;importja......
  • 链表-2. 两数相加
    之前没有做过链表,这题我一提交就报错,后面发现需要用链表这种数据结构返回在网上查了下链表的概念,做完了它给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按......
  • 【code基础】链表问题总结
    数组和链表的区别数组:所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。数组具备了通过下标快速访问数据的能力增加数组容量需要先申请一块新的内存,......
  • LeetCode160 相交链表
       idea:比较相同信息,首先想到用嵌套for循环解决,方法比较简单,不过时间复杂度高 /** * Definition for singly-linked list. * struct ListNode { *......
  • LeetCode 206 反转链表
    给你单链表的头节点head,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出......
  • 【c语言编程基础】结构体单向链表的基本操作
    前言 关注点 code#include<stdio.h>#include<stdlib.h>#include<string.h>//strcat#defineSize4typedefstructTable{intlen;intsize;......
  • android面试题--单链表反转
     //定义链表类classNode{intdata;Nodenext;}voidmain(){//第一步:新建链表Nodefive=newNod......
  • 反转链表
    题目:给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。  定义链表结构:  publicclassListNode{intval;ListNodenext;Lis......
  • leetcode链表1-6
    目录leetcode链表1.删除链表中的节点2.删除链表中倒数第n个节点3.反转链表4.合并两个有序链表5.判断回文链表6.判断是否为环形链表leetcode链表1.删除链表中的节点题目:......
  • Golang Redis有序集合(sorted set)
    Redis有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,这个分数主要用于集合元素排序。引用git......