题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
思路分析
以此实例为例,用newhead来保存新链表的头结点,然后比较两个链表的头结点数据,取出较小的,尾插到新链表,直到其中一个链表的指针走到NULL,这时直接把另一个链表剩余结点全部尾插就可以了
代码实现
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode* newhead=NULL,*tail=NULL;
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
struct ListNode* n1=l1,*n2=l2;
if(n1->val<n2->val)
{
newhead=tail=n1;
n1=n1->next;
}
else
{
newhead=tail=n2;
n2=n2->next;
}
while(n1&&n2)//这里是判断程序继续运行的条件,不是结束的条件,如果是n1||n2的话,当n1为空是,n2不为空,程序会继续进入循环,将n1和n2的值进行比较,而此时n2为空,不能再进行比较了
{
if(n1->val < n2->val)
{
tail->next=n1;
tail=n1;
n1=n1->next;
}
else
{
tail->next=n2;
tail=n2;
n2=n2->next;
}
}
//如果有一个为空,直接把另一个链表尾插
if(n1)
{
tail->next=n1;
}
if(n2)
{
tail->next=n2;
}
return newhead;
}