原题来自牛客网:链接
题目描述
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。
思路
因为两个链表是有序的,因此从两个链表逐个元素取出并比较大小,将更小的放入链表前面即可。
整个合并过程和归并排序的归并操作类似,代码框架也差不多,难度不大。
为了方便返回可以new一个空结点作为头结点,最后返回head->next即可。
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1&&!l2)
return NULL;
ListNode *head=new ListNode(0),*pre=head;
while(l1&&l2){
if(l1->val < l2->val){
pre->next=l1;
l1=l1->next;
}
else{
pre->next=l2;
l2=l2->next;
}
pre=pre->next;
}
if(l1)
pre->next=l1;
if(l2)
pre->next=l2;
return head->next;
}
};