核心思想,构建一个头节点作为哨兵位(尾插法,一般考虑使用头节点)
/**
* 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* l1, ListNode* l2) {
ListNode* head,*tail;
head = tail = new ListNode;//构建一个头结点,尾结点适中指向新链表的尾部
//取小的进行尾
while(l1 != nullptr && l2 != nullptr)
{
if (l1->val < l2->val)//l1更小
{
tail->next = l1;
l1 = l1->next;
}
else
{
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
if(l1 != nullptr)
{
tail->next = l1;
}
else if(l2 != nullptr)
{
tail->next = l2;
}
ListNode* l = head->next;//先用l记录head->next所在的位置
delete head;//注意释放new出来的节点
return l;//不能return head 因为是我们自己构建的,要return head->next
}
};