目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
题目给我们两个有序的链表,要我们保持升序的状态合并它们。
我们可以马上想要把两个链表都遍历一遍,把所有节点的值都放入一个容器里,排序之后再创建一个新的链表。
但是第一,题目是要求拼接链表的节点,而这么做的话有点小犯规。
第二就是没有利用到原本两个链表就是升序的这个特点。
要利用到原本链表升序的特点,我们就需要从左往右依次对两个链表的节点做比较,将较小的节点排到新链表的前面,因为两个链表原本就是升序的,所以这么做,最终合并成的新链表也是升序的。
我们需要定义一个新链表的头,然后进入一个while的循环,循环条件是两个链表至少有一个不为空指针,如果其中一个为空指针,那么新链表的下一个节点直接连上另一个链表,然后退出循环。
如果两个链表都不为空指针,那么我们就需要对比一下他们节点的值,取一个较小的作为新链表的下一个节点。
如此循环,直到最后我们就可以获取到合并两个升序链表后的新升序链表了。
代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* res=new ListNode(0,nullptr);
ListNode* cur=res;
while(list1!=nullptr||list2!=nullptr){
if(list1==nullptr){
cur->next=list2;
break;
}else if(list2==nullptr){
cur->next=list1;
break;
}
if(list1->val<list2->val){
cur->next=list1;
cur=cur->next;
list1=list1->next;
}else{
cur->next=list2;
cur=cur->next;
list2=list2->next;
}
}
return res->next;
}
};