将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
思路:很简单就是二路归并的思想,时间复杂度O(n)。
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { struct ListNode *l,*r,*s; l=(struct ListNode *)malloc(sizeof(struct ListNode)); r=l; while(l1!=NULL||l2!=NULL) { s=(struct ListNode *)malloc(sizeof(struct ListNode)); if(l1!=NULL&&l2!=NULL) { if(l1->val<l2->val) { s->val=l1->val; r->next=s; r=s; l1=l1->next; } else { s->val=l2->val; r->next=s; r=s; l2=l2->next; } } else if(l1!=NULL) { s->val=l1->val; r->next=s; r=s; l1=l1->next; } else if(l2!=NULL) { s->val=l2->val; r->next=s; r=s; l2=l2->next; } } r->next=NULL; return l->next; }