题解 | 合并两个排序的链表

合并两个排序的链表

https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param pHead1 ListNode类
 * @param pHead2 ListNode类
 * @return ListNode类
 */
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    struct ListNode head1Node = { .next = pHead1 };
    struct ListNode head2Node = { .next = pHead2 };
    struct ListNode* p1 = pHead1;
    struct ListNode* p1Pre = &head1Node; // p1的前元素
    struct ListNode* p2 = pHead2;

    if ((pHead1 == NULL) && (pHead2 != NULL)) {
        return pHead2;
    } else if ((pHead1 != NULL) && (pHead2 == NULL)) {
        return pHead1;
    } else if ((pHead1 == NULL) && (pHead2 == NULL)) {
        return NULL;
    }

    
    while ((p1 != NULL) && (p2 != NULL)) {
        if (p1->val >= p2->val) {
            //将p2元素插入p1前
            head2Node.next = p2->next;
            p2->next = p1;
            p1Pre->next = p2;
            p1Pre = p1Pre->next;
            p2 = head2Node.next;
        } else {
            //移动p1和p1Pre
            p1 = p1->next;
            p1Pre = p1Pre->next;
        }
    }
    //如果list1已经遍历结束,则说明剩下的list2均大于list1,直接接在list1尾部即可
    if (p1 == NULL) {
        p1Pre->next = p2;
    }

    return head1Node.next;
}

全部评论

相关推荐

牛客36400893...:我不是这个专业的,但是简历确实没有吸引我的亮点,而且废话太多没耐心看
0offer是寒冬太冷还...
点赞 评论 收藏
分享
牛马人的牛马人生:500一天吗?香麻了
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务