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

合并两个排序的链表

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 ) {
    // write code here
    struct ListNode q;
    struct ListNode* tail=&q;
    while (pHead1&& pHead2) {
    if (pHead1->val<pHead2->val) {
        tail->next=pHead1;
        pHead1=pHead1->next;
    
    }
    else {
    tail->next=pHead2;
    pHead2= pHead2->next;
    }
    tail=tail->next;
    }
    tail->next=pHead1?pHead1:pHead2;
    return q.next;
}

在最后用条件运算符(三元运算符)来判断pHead1和pHead2哪个不为空,然后将非空的链表直接连接到新链表的尾部。

具体解释如下:

如果pHead1不为空(即还有剩余节点未处理),则将tail->next指向pHead1,表示将剩余的pHead1链表连接到新链表的尾部。

如果pHead1为空但pHead2不为空,则将tail->next指向pHead2,表示将剩余的pHead2链表连接到新链表的尾部。

如果两个链表都为空,则条件运算符返回空指针,表示新链表的尾部仍然为空。

这样的设计使得代码更加简洁和高效,同时确保了正确处理两个链表中可能存在的剩余节点,将它们正确连接到新链表的尾部,最终返回合并后的有序链表的头节点。

#新手小白刷题#
全部评论

相关推荐

01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务