struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2) {
// 使用哨兵节点简化处理
struct ListNode dummy;
struct ListNode* tail = &dummy;
dummy.next = NULL;
while (pHead1 != NULL && pHead2 != NULL) {
if (pHead1->val <= pHead2->val) {
tail->next = pHead1;
pHead1 = pHead1->next;
} else {
tail->next = pHead2;
pHead2 = pHead2->next;
}
tail = tail->next;
}
// 连接剩余节点
tail->next = (pHead1 != NULL) ? pHead1 : pHead2;
return dummy.next;
}
这个题目本身确实不难,但我还是用了好久的时间,核心就是那个链表的基本概念还不清楚。就是这个节点总是换来换去的
他自己的头节点这个很重要,在改变的时候一定要复制一份不然肯定是找不到后续的节点了,这一点很重要,第一次写的程序就是这个问题,自己没找到,还是靠AI帮忙找到的。
这个提交的代码就是AI帮助改的,它是直接新建了一个去保存头节点,对这个节点很重要肯定是需要去保存的。

京公网安备 11010502036488号