21. 合并两个有序链表

21. 合并两个有序链表


题目链接:21. 合并两个有序链表

代码如下:

/**
 * 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* head=new ListNode;
        head->next=nullptr;
        ListNode* r=head;
        ListNode* temp=nullptr;

        ListNode *lp1=list1,*lp2=list2;

        //归并排序的思想
        while(lp1&&lp2)
        {
            if(lp1->val<lp2->val)
            {
                temp=lp1;
                lp1=lp1->next;
            }
            else
            {
                temp=lp2;
                lp2=lp2->next;
            }

            temp->next=r->next;
            r->next=temp;
            r=temp;
        }

        //如果lp1未排完,就接着排
        while(lp1)
        {   
            temp=lp1;
            lp1=lp1->next;
            temp->next=r->next;
            r->next=temp;
            r=temp;
        }

        //如果lp2未排完,就接着排
        while(lp2)
        {   
            temp=lp2;
            lp2=lp2->next;
            temp->next=r->next;
            r->next=temp;
            r=temp;
        }

        return head->next;
    }
};

你可能感兴趣的:(leetcode,链表,c++)