合并两个有序链表
链表基础题,理清节点和链表如何申请使用,同时while的排序合并是经典算法,需灵活运用。
/**
* 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 *s,*lc; //s为工作指针,是一个节点,不需要申请空间,不需要new
lc = new ListNode(); //新的带头结点的链表
s=lc;
while(list1!=nullptr && list2!=nullptr){
if(list1->val<list2->val){
s->next = list1;
list1=list1->next;
s=s->next;
}
else{
s->next = list2;
list2=list2->next;
s=s->next;
}
}
if(list1==nullptr)
s->next = list2;
else
s->next = list1;
return lc->next; //去掉头节点
}
};