0
点赞
收藏
分享

微信扫一扫

剑指offer 36.合并两个排序的链表

无愠色 2022-05-06 阅读 71
/**
 * 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;
        
    }
};
举报

相关推荐

0 条评论