首页 > 其他分享 >双指针法(巧妙思想)

双指针法(巧妙思想)

时间:2023-02-22 17:00:44浏览次数:45  
标签:p2 p1 ListNode 思想 巧妙 next 链表 l2 指针

双指针法(巧妙思想)

21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

img

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路(来源:labuladong):

可以使用双指针,比较两个升序列表的节点

img

如图,类似两个拉链,每次拉的时候都会进行节点比较,存入dummy中。

代码中还用到一个链表的算法题中是很常见的「虚拟头结点」技巧,也就是 dummy 节点,它相当于是个占位符,可以避免处理空指针的情况,降低代码的复杂性。

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(-1), p = dummy;
    ListNode p1 = l1, p2 = l2;
    //双指针法
    while (p1 != null && p2 != null){
        if (p1.val > p2.val){ //选择较小元素填充到p后
            p.next = p2;
            p2 = p2.next;
        }else {
            p.next = p1;
            p1 = p1.next;
        }
        p = p.next;
    }
    if(p1 != null){
        p.next = p1;
    }
    if(p2 != null){
        p.next = p2;
    }

    return dummy.next;
}

标签:p2,p1,ListNode,思想,巧妙,next,链表,l2,指针
From: https://www.cnblogs.com/chengbb/p/17145056.html

相关文章

  • C++编程思想
    命名空间所有的标准C++标准库都封装在std命名空间中include<iostream.h>相当于:#include<iostread>usingnamespacestd;C++输出格式控制voidtest(){cout<<......
  • 继承与this指针
    子类构造时,父类的构造函数中若出现this,那么这个this时指向子类对象的:参考:https://blog.csdn.net/qilvmilv/article/details/47324487 此外qt中:      他打......
  • 两数之和、三数之和、四数之和(双指针)
    两数之和:1.两数之和-力扣(LeetCode)思路:单次循环,利用哈希表:key存储值,val存储索引;时间复杂度、空间复杂度均为:O(N)classSolution{public:vector<int>two......
  • C++ 用同一个raw pointer传入shared_ptr构造函数生成两个智能指针有什么问题?
    EffectiveModernC++Item19:usestd::shared_ptrforshared-ownershipresourceNow,theconstructorforspw1iscalledwitharawpointer,soitcreatesaco......
  • 多维数组指针
    #include<stdio.h>floataver(float*p){ floatsum=0; inti; for(i=0;i<20;i+=4){ //关于第0列求和 sum+=*(p+i); } returnsum;}intwell......
  • 分支与指针 git 230220
    分支与指针多分支走向......
  • 智能指针
    原文链接:C++智能指针一、使用智能指针原因智能指针就是帮C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!如下例子就是内存泄露的例......
  • 常量指针和指针常量
    指针常量:本质是指针,但是指向常量,也就是可以改变指向,但是不可以改变指向的值-常量指针:本质是指针,但是是常量的指针,不可以改变指向,但是可以改变指向的值a和&a有什么区别?......
  • 指针进阶2 - 函数
    1.函数指针函数名VS&函数名对于数组而言,数组名=首元素地址,&数组名=整个数组的地址那么函数名和&函数名等于什么#include<stdio.h>voidtest(){ ;}intmain()......
  • 指针和引用的区别
    指针是一个变量,存储的是一个地址,引用跟原来的变量实质上是同一个东西,是原变量的别名指针可以有多级,引用只有一级指针可以为空,引用不能为NULL且在定义时必须初始化指针......