leetcode_合并两个有序链表

Posted 明卿册

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于leetcode_合并两个有序链表的主要内容,如果未能解决你的问题,请参考以下文章

leetcode_数据结构_链表_21合并两个有序链表(递归初步)

LeetCode(21. 合并两个有序链表)

leetcode——21. 合并两个有序链表

leetcode_合并两个有序链表

合并两个有序链表_21

LeetCode 21. 合并两个有序链表