[Algorithm] C++ 合并两个有序链表

32 阅读1分钟

合并有序链表,这种题目常考也是面试中经常遇到的。一般采取创建一个虚拟头节点,遍历两个链表,比较大小,然后追加到dumy后面,最后不要忘记把剩下没遍历完的链表加到后面。

/* define sigle-link struct */
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int a): val(a), next(nullptr){}
};

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode dumy = new ListNode(0);
        ListNode curr = dumy;
        while(list1 && list2) {
            if(list1->val < list2->val) {
                curr-> next = list1;
                list1 = list1->next;
            } else {
                curr-> next = list2;
                list2 = list2->next;
            }
            curr = curr->next;
        }
        curr->next = list1?list1:list2;
        return dumy->next;
}