Leetcode-21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

/**
 * 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 = join(l1, l2);
        return Head;
    }
    ListNode* join(ListNode* l1, ListNode* l2)
    {
        ListNode* head = new ListNode(0); //头指针
        ListNode* last = head; //尾指针
        
        while (l1!= NULL&& l2!= NULL)
        {
            if(l1->val <= l2->val)
            {
                ListNode* temp = l1; 
                l1= l1->next;
                
                temp->next =last->next;
                last->next = temp;  //交换指针
                last = temp;  //last更新
            }
            else
            {
                ListNode* temp = l2; 
                l2= l2->next;
                
                temp->next =last->next;
                last->next = temp;
                last = temp;
            }
            //printf("--%d\n", head->next->val);
        }
        if (l1== NULL) last->next = l2;
        else last->next = l1;
        
        return head->next;
    }
};

 

posted @ 2020-07-04 22:38  egoist的翻绳游戏  阅读(105)  评论(0编辑  收藏  举报