leetcode_合并两个有序链表

不敢确定自己理解的一定正确,

但是可以讲得通。

此题解法重点在于开了一个新的头结点。

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1,ListNode* l2) {
        ListNode* head = new ListNode(0);
        ListNode* p = head;        //p和head指向同一个头结点

        while(l1 != NULL && l2 != NULL) {
            if(l1->val <= l2->val) {
                p->next = l1;
                l1 = l1->next;
            } else {
                p->next = l2;
                l2 = l2->next;
            }
            p = p->next;
        }
        if(l1 != NULL) p->next = l1;
        if(l2 != NULL) p->next = l2;
        return head->next;
    }
};

感觉比较难以理解的就是head和p是虽然是两个指针,

但是一开始的时候指向的都是new ListNode(0)开辟出来的那一块内存  //不知道自己这么理解对不对

所以在while循环中虽然没有对head有过什么操作,只是对p进行操作,

但是最后,返回的却是head->next。

原文地址:https://www.cnblogs.com/huangming-zzz/p/10227338.html