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