将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入: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) {
//创建头指针,指向第一个有效结点
struct ListNode* head = (struct ListNode* )malloc( sizeof(struct ListNode) );
struct ListNode* link = head;
if( l1==NULL && l2==NULL )
return NULL;
while( l1!=NULL && l2!=NULL ) //循环比较,直到其中一个链表为空
{
if( l1->val > l2->val )
{
link->next = l2;
l2 = l2->next;
}
else
{
link->next = l1;
l1 = l1->next;
}
link = link->next; //指针移动,指向最后一个结点
}
link->next = ( l2==NULL ) ? l1 : l2; //将非空的链表全部链接到新有序链表上
return head->next;
}