将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
//创建一个新的头结点nhead和一个指针ptr,循环比较节点l1和节点l2,用ptr连接其中小的一个。循环完成之后
//相当于利用ptr构建了一个新的链表。最后nhead的下一个节点就是新的节点。
struct ListNode *nhead = (struct ListNode*)malloc(sizeof(struct ListNode));
nhead->next = NULL;
struct ListNode *ptr = nhead;
while(l1 && l2)
{
if(l1->val <= l2->val)
{
ptr->next = l1;
l1 = l1->next;
}
else
{
ptr->next = l2;
l2 = l2->next;
}
ptr = ptr->next;
}
if(l1)
ptr->next = l1;
else
ptr->next = l2;
ptr = nhead->next;
free(nhead);
return ptr;
}