将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Author : FlynnLi
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if (!l1)
return l2;
if (!l2)
return l1;
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *p = head;
while (l1 && l2)
{
if (l1->val < l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if (l1)
p->next = l1;
else if (l2)
p->next = l2;
return head->next;
}
代码思路:定义一个表头结点和指向该表头结点的指针,对比两个链表,将小的或等于的数的结点置为p->next,然后将对比后链表l1或l2的下一个结点置为要对比的当前结点,继续循环比较,最后将多余结点串到表尾。