美文网首页
17 合并两个排序链表

17 合并两个排序链表

作者: WalkZeRo | 来源:发表于2016-06-27 11:14 被阅读0次
    #include <iostream>
    #include "list.h"
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if(pHead1 == NULL)
            return pHead2;
        else if(pHead2 == NULL)
            return pHead1;
    
        ListNode* pMergeHead = NULL;
    
        if(pHead1->m_nValue < pHead2->m_nValue)
        {
            pMergeHead = pHead1;
            pMergeHead->m_pNext = Merge(pHead1->m_pNext, pHead2);
        }
        else
        {
            pMergeHead = pHead2;
            pMergeHead->m_pNext = Merge(pHead1, pHead2->m_pNext);
        }
    
        return pMergeHead;
    }
    
    // ====================测试代码====================
    ListNode* Test(char* testName, ListNode* pHead1, ListNode* pHead2)
    {
        if(testName != NULL)
            printf("%s begins:\n", testName);
    
        printf("===The first list is:===\n");
        PrintList(pHead1);
    
        printf("===The second list is:===\n");
        PrintList(pHead2);
    
        printf("===The merged list is:===\n");
        ListNode* pMergedHead = Merge(pHead1, pHead2);
        PrintList(pMergedHead);
        
        printf("\n\n");
    
        return pMergedHead;
    }
    
    // list1: 1->3->5
    // list2: 2->4->6
    void Test1()
    {
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode3 = CreateListNode(3);
        ListNode* pNode5 = CreateListNode(5);
    
        ConnectListNodes(pNode1, pNode3);
        ConnectListNodes(pNode3, pNode5);
    
        ListNode* pNode2 = CreateListNode(2);
        ListNode* pNode4 = CreateListNode(4);
        ListNode* pNode6 = CreateListNode(6);
    
        ConnectListNodes(pNode2, pNode4);
        ConnectListNodes(pNode4, pNode6);
    
        ListNode* pMergedHead = Test("Test1", pNode1, pNode2);
    
        DestroyList(pMergedHead);
    }
    
    // 两个链表中有重复的数字
    // list1: 1->3->5
    // list2: 1->3->5
    void Test2()
    {
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode3 = CreateListNode(3);
        ListNode* pNode5 = CreateListNode(5);
    
        ConnectListNodes(pNode1, pNode3);
        ConnectListNodes(pNode3, pNode5);
    
        ListNode* pNode2 = CreateListNode(1);
        ListNode* pNode4 = CreateListNode(3);
        ListNode* pNode6 = CreateListNode(5);
    
        ConnectListNodes(pNode2, pNode4);
        ConnectListNodes(pNode4, pNode6);
    
        ListNode* pMergedHead = Test("Test2", pNode1, pNode2);
    
        DestroyList(pMergedHead);
    }
    
    // 两个链表都只有一个数字
    // list1: 1
    // list2: 2
    void Test3()
    {
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode2 = CreateListNode(2);
    
        ListNode* pMergedHead = Test("Test3", pNode1, pNode2);
    
        DestroyList(pMergedHead);
    }
    
    // 一个链表为空链表
    // list1: 1->3->5
    // list2: 空链表
    void Test4()
    {
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode3 = CreateListNode(3);
        ListNode* pNode5 = CreateListNode(5);
    
        ConnectListNodes(pNode1, pNode3);
        ConnectListNodes(pNode3, pNode5);
    
        ListNode* pMergedHead = Test("Test4", pNode1, NULL);
    
        DestroyList(pMergedHead);
    }
    
    // 两个链表都为空链表
    // list1: 空链表
    // list2: 空链表
    void Test5()
    {
        ListNode* pMergedHead = Test("Test5", NULL, NULL);
    }
    
    int main(void)
    {
        Test1();
        Test2();
        Test3();
        Test4();
        Test5();
    
        return 0;
    }
    

    结果

    QQ截图20160627111039.jpg

    相关文章

      网友评论

          本文标题:17 合并两个排序链表

          本文链接:https://www.haomeiwen.com/subject/rnyzdttx.html