一道合并有序链表的题
/**
* 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) {
ListNode* prehead=new ListNode(-1);//哨兵
ListNode* temp=prehead;
// 当链表都不为空才是进入循环的条件
while(list1!=nullptr&&list2!=nullptr){
if(list1->val<list2->val){
temp->next=list1;
list1=list1->next;
}
else{
temp->next=list2;
list2=list2->next;
}
temp=temp->next;
}
temp->next=list1==nullptr?list2:list1;
return prehead->next;
}
};
未想到短短几月,在接触同一道题,还收获许多知识与感悟!
ps:我是个编码小垃圾,大佬路过别喷~
将两个链表合并成一个链表,
1.首先我们建立一个哨兵prehead,方便返回合并链表l3的头指针。在建立连接链表的一个指针temp,若l1中val小于l2中val,temp中next将存储l1的结点的地址,l1遍历到它的下一个结点。否则,反。这时我们完成了一次比较,将temp->next赋值给temp。进入下次循环的比较
2.当我们退出循环时,L1,L2其中为空间链表。我们可以直接将非空链表插入到L3中尾指针后面,最后将L3的头指针返回,也就是之前提到的prehead的next.

浙公网安备 33010602011771号