AcWing 36. 合并两个排序的链表(有注释,不建立新链表,用指针指向现有链表值)
原题链接
简单
作者:
九里今天学点什么呢
,
2021-04-24 22:43:18
,
所有人可见
,
阅读 310
/**
* 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(0);//创建一个虚拟头结点,值为-1;
ListNode* tail=dummy;//当前尾节点是虚拟头结点dummy
while(l1!= NULL&&l2!= NULL){//还没有结束排序
if(l1->val<l2->val){//如果l1当前头结点较小
tail->next = l1;//当前尾节点的next 指向l1当前的头结点
l1 = l1->next;//l1头结点后移
}
else{
tail->next = l2;//同l1
l2 = l2->next;
}
tail=tail->next;//尾节点变为新加入的l1的头结点
}
if(l1){tail->next=l1;}//如果l1还有元素没有加入,则将尾节点的next 指向l1当前的头结点
if(l2){tail->next=l2;}//同上
return dummy->next;//返回实际的排序后链表的头结点
}
};