合并两个排序的链表

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
 
要求:空间复杂度O(1),时间复杂度O(n)
 
如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6}
 
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2) {
    if (pHead1 == NULL) return pHead2;
    if (pHead2 == NULL) return pHead1;
    struct ListNode* p1 = pHead1;
    struct ListNode* p2 = pHead2;
    struct ListNode* t1 = NULL;
    struct ListNode* t2 = NULL;

    if (pHead1->val < pHead2->val) {
        p1 = pHead1;
        p2 = pHead2;
    } else {
        p1 = pHead2;
        p2 = pHead1;
    }

    while (p1->next != NULL && p2 != NULL) {
        if (p1->next->val > p2->val) {
            t1 = p1->next;
            t2 = p2->next;
            p1->next = p2;
            p2->next = t1;
            p2 = t2;
        }
        p1 = p1->next;
    }

    if (p2 != NULL) {
        p1->next = p2;
    }

    return (pHead1->val < pHead2->val) ? pHead1 : pHead2;
}
 
主要思路:让p1是两个序列中第一个值小的那一列,通过p1的移动来和p2的值比大小移动节点的指针域,遍历完之后如果p2还有值只需让p1->next=p2即可实现一条有序链表
posted @ 2023-07-13 23:26  歪爱慕外  阅读(20)  评论(0)    收藏  举报