题目来自LeetCode。
题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
贴代码:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
int i = 0;
struct ListNode *p1 = l1, *p2 = l2;
struct ListNode *p3 = NULL, *pHead = NULL, *pNew = NULL;
pHead = (struct ListNode*)malloc(sizeof(struct ListNode));
p3 = pHead;
p3->next = NULL;
for (i = 0; p1 != NULL || p2 != NULL ; i++)
{
if (p1 != NULL && p2 != NULL)
{
if (p1->val <= p2->val)
{
pNew = (struct ListNode*)malloc(sizeof(struct ListNode));
pNew->val = p1->val;
p3->next = pNew;
pNew->next = NULL;
p3 = pNew;
p1 = p1->next;
}
else
{
pNew = (struct ListNode*)malloc(sizeof(struct ListNode));
pNew->val = p2->val;
p3->next = pNew;
pNew->next = NULL;
p3 = pNew;
p2 = p2->next;
}
}
else if (p1 != NULL && p2 == NULL)
{
pNew = (struct ListNode*)malloc(sizeof(struct ListNode));
pNew->val = p1->val;
p3->next = pNew;
pNew->next = NULL;
p3 = pNew;
p1 = p1->next;
}
else if (p1 == NULL && p2 != NULL)
{
pNew = (struct ListNode*)malloc(sizeof(struct ListNode));
pNew->val = p2->val;
p3->next = pNew;
pNew->next = NULL;
p3 = pNew;
p2 = p2->next;
}
}
return pHead->next;
}