Leetcode链表easy | 21.合并两个有序链表

2018-11-23  本文已影响2人  Ivan_Lan

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

示例:

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

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* h1=l1;   //  原有链表的动态指针
        ListNode* h2=l2;
        ListNode* node= new ListNode(0);   // 新建辅助节点,作为合并链表的暂时的头节点,最后需释放
        ListNode* current =node;  //  合并链表的动态指针
        
        while(h1&&h2){
            if(h1->val<=h2->val){
                current->next = h1;
                h1=h1->next;
                current=current->next;
            }  //  比较两个链表的节点的值,谁小,就接到合并链表的后面,动态指针后移
            else{
                current->next = h2;
                h2=h2->next;
                current=current->next;
            }
        }  //  等长部分的合并
        
        while(h1){
            current->next=h1;
            h1=h1->next;
            current=current->next;
        }  // 不等长部分的直接遍历连接到合并链表的后面
        
        while(h2){
            current->next=h2;
            h2=h2->next;
            current=current->next;
        }
        
        ListNode* ret=node->next;   //  暂时的头结点的后面一个节点作为合并完成的节点
        delete node;  //  释放
        return ret;
    }
};

上一篇下一篇

猜你喜欢

热点阅读