题解 | #合并两个排序的链表#
合并两个排序的链表
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链表连接到新链表的尾部。
如果两个链表都为空,则条件运算符返回空指针,表示新链表的尾部仍然为空。
这样的设计使得代码更加简洁和高效,同时确保了正确处理两个链表中可能存在的剩余节点,将它们正确连接到新链表的尾部,最终返回合并后的有序链表的头节点。
#新手小白刷题#