修改如下,供参考:
struct ListNode* mergeTwoLists(struct ListNode* L1, struct ListNode* L2)
{
struct ListNode* p1 = L1, * p2 = L2;
struct ListNode* tail = NULL, * head = NULL, * pt = NULL;
if (L1 == NULL && L2 == NULL) { //L1 L2 都为空链表
printf("NULL");
return NULL;
}
if (L1 && L2) { //L1 L2 都不空
while (p1 && p2)
{
if (p1->val > p2->val) {
pt = p2;
p2 = p2->next;
}
else {
pt = p1;
p1 = p1->next;
}
if (head == NULL)
head = pt;
else
tail->next = pt;
tail = pt;
}
tail->next = p1 ? p1 : p2;
}
else //L1 L2 其中一个为空
head = L1 ? L1 : L2;
L1 = NULL; L2 = NULL;
return head;
}
没有看到你的插入链表的操作。只看到了在l1和l2中跳来跳去。你可以用笔实际按照你的代码画一下,应该就清楚问题所在了