题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
分析:
先判断有没有其中一个 空的,如果其中一个是空的则返回另一个;否则先找一个小的做头(这时候将头保存下来)然后将以此比较两个链表的节点值,哪个小就作为新链表的尾插节点,最后只要有一个完了就停止,然后将另一个直接连在后面即可。
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
//如果其中一个为空,则返回另外一个
if(l1==nullptr)
return l2;
if(l2==nullptr)
return l1;
//两个都不为空
//先从两个链表的头部找一个小的,做头
ListNode* newnode=nullptr;
if(l1->val<l2->val)//l1的头小
{
newnode=l1;
l1=l1->next;
}
else//l2的头小
{
newnode=l2;
l2=l2->next;
}
ListNode* l=newnode;//将头保存下来
//剩下的
while(l1 && l2)//只要有一个结束就结束
{
if(l1->val<l2->val)
{
newnode->next=l1;
l1=l1->next;
}
else
{
newnode->next=l2;
l2=l2->next;
}
//不管如何,newnode都要向后移动
newnode=newnode->next;
}
//看哪一个还有直接接上去
if(l1)
{
newnode->next=l1;
}
if(l2)
{
newnode->next=l2;
}
return l;
}