/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* merge(ListNode* l1, ListNode* l2) {
//就是运用归并排序的思想,将两个链表按照值从小到大合并
//思想很简单,双指针,两个指针比较,小的则更新,最后再将非空的链表接上去即可
ListNode *dummy=new ListNode(-1);//创建一个虚拟头结点dummy,来简化算法
ListNode *cur =dummy ; //充当指针,来往后遍历更新
while(l1!=NULL&&l2!=NULL)
{
if(l1->val<l2->val)
{
cur=cur->next=l1; //此次判断l1值小,则将cur指针向后移,同时将其指向l1当前节点
l1=l1->next;
}
else
{
cur=cur->next=l2;
l2=l2->next;
}
}
cur->next=(l1!=NULL?l1:l2);//这个写法贼简便,省下了归并排序的两个循环。
return dummy->next;
}
};