题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路
- 旧链表是有序的,因此比较他们第一个,将较小节点给新链表。
- 然后对应较小节点的旧链表读取下一个节点。
- 重复1和2,直到旧链表中有一个结束。
详细代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
if(l1 == NULL & &l2 == NULL) return NULL;
if(l1 == NULL) return l2;
if(l2 == NULL) return l1;
struct ListNode *l3,*head;//l3是新链表。head是l3的头节点。(必须记录)
l3 = l1->val < l2->val? l1 : l2;//比较
head = l3;//记录头节点
if(l1->val < l2->val) l1=l1->next;//旧链表下一个节点
else l2=l2->next;
while(l1