/** * 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.
标签:ListNode,temp,list1,合并,next,链表,有序,list2 From: https://www.cnblogs.com/coolcooldi/p/17060491.html