美文网首页二叉树之下
0021-合并两个有序链表

0021-合并两个有序链表

作者: liyoucheng2014 | 来源:发表于2018-11-28 16:30 被阅读1次

    合并两个有序链表

    方案一


    具体思想就是新建一个链表,然后比较两个链表中的元素值,把较小的那个链到新链表中,由于两个输入链表的长度可能不同,所以最终会有一个链表先完成插入所有元素,则直接另一个未完成的链表直接链入新链表的末尾

    借助单链表实现

    C-源代码


    #include <stdlib.h>
    
    #include "LinkList.h"
    
    struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
        if (l1 == NULL) {
            return l2;
        }
        
        if (l2 == NULL) {
            return l1;
        }
        
        struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
        head->next = NULL;
        
        struct ListNode *p = head;
        
        while (l1 != NULL && l2 != NULL) {
            if (l1->val < l2->val) {
                p->next = l1;
                l1 = l1->next;
            }
            else {
                p->next = l2;
                l2 = l2->next;
            }
            p = p->next;
        }
        
        if (l1 != NULL) {
            p->next = l1;
        }
        
        if (l2 != NULL) {
            p->next = l2;
        }
        
        p = head->next;
        free(head);
        
        return p;
    }
    
    void test_0021(void) {
        int arr1[3] ={ 4, 2, 1 };
        int arr2[3] ={ 4, 3, 1 };
        struct ListNode *l1 = createNode(arr1, sizeof(arr1) / sizeof(arr1[0]));
        struct ListNode *l2 = createNode(arr2, sizeof(arr2) / sizeof(arr2[0]));
        printNode(l1);
        printNode(l2);
        
        struct ListNode *ret = mergeTwoLists(l1, l2);
        printNode(ret);
    }
    

    参考Grandyang

    相关文章

      网友评论

        本文标题:0021-合并两个有序链表

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