首页 > 其他分享 >leetcode day4 24 19 面试题02.07 142

leetcode day4 24 19 面试题02.07 142

时间:2023-07-15 23:56:48浏览次数:39  
标签:24 面试题 142 nullptr head next 链表 ListNode 节点

目录

24. 两两交换链表中的节点


if(head==nullptr||head->next==nullptr)
        {
            return head;
        }
        //ans指针,永远指向head,返回值
        ListNode * ans=new ListNode(-1,head);
        //指向前一个
        ListNode * pre=ans;
        //指向中间一个
        ListNode * cur=head;
        ListNode * next=head->next;
        while(1)
        {
            //前一个结点指向next
            pre->next=next;
            //中间节点指向next的下一个节点
            cur->next=next->next;
            //next节点指向中间节点
            next->next=cur;
            //pre节点后移到中间节点
            pre=cur;
            //如果不为空就继续循环
            if(cur->next!=nullptr)
            {
              cur=cur->next;  
            }
            else
            {
                break;
            }
            if(cur->next!=nullptr)
            {
                next=cur->next;
            }
            else
            {
                break;
            }
        }
        return ans->next;

19.删除链表的倒数第N个节点

比较简单,主要思路就是先计算整个链表的长度,用长度减去n,得到要移除节点的位置,再移除节点

ListNode * ans=new ListNode(-1,head);
        ListNode * temp=new ListNode(-1,head);
        if(head->next==nullptr)
        {
            return nullptr;
        }
        //计算移动的距离
        int size=0;
        while(temp->next!=nullptr)
        {
            size++;
            temp=temp->next;
        }
        ListNode * temp1=ans;
        int max=size-n;
        //定位要移除节点的位置
        for(int i=0;i<max;i++)
        {
            temp1=temp1->next;
        }
        //移除节点
        temp1->next=temp1->next->next;
        return ans->next;

面试题 02.07. 链表相交

我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,
如图:

此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。

ListNode * A=headA;
        ListNode * B=headB;
        int lenA=0;
        int lenB=0;
        while(A!=nullptr)
        {
            A=A->next;
            lenA++;
        }
        while(B!=nullptr)
        {
            B=B->next;
            lenB++;
        }
        int gap=abs(lenA-lenB);
        A=headA;
        B=headB;
        if(lenA>lenB)
        {
            while(gap--)
            {
                A=A->next;
            }
            while(lenB--)
            {
                if(A==B)
                {
                    return A;
                }
                A=A->next;
                B=B->next;
            }
        }
        else{
            while(gap--)
            {
                B=B->next;
            }
            while(lenA--)
            {
                if(A==B)
                {
                    return A;
                }
                A=A->next;
                B=B->next;
            }

        }
        return nullptr;

142

通过unordered_set来确定是否被访问过

unordered_set<ListNode *> visited;
        while(head!=nullptr)
        {
            if(visited.count(head))
            {
                return head;
            }
            visited.insert(head);
            head=head->next;

        }
        return nullptr;

标签:24,面试题,142,nullptr,head,next,链表,ListNode,节点
From: https://www.cnblogs.com/liviayu/p/17557253.html

相关文章

  • ABC243F
    发现直接记录有哪些奖品被选是不可能的,所以考虑转换一下思路:设\(dp_{i,j,p}\)为只考虑前\(i\)个奖品,抽了\(j\)次,有\(p\)种不同奖品的的概率。这个状态相当于是维护一个操作(抽奖)序列。考虑每次加入\(q\)个第\(i\)种奖品,就相当于是将原序列和一个由\(q\)个\(i\)组......
  • USB Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
     转载自:文章Type-C接口母头/母座公头/插头 可以很明显看出,插口内的Pin功能相对于中心对称。公头插入母头,无论正反插,引脚功能都完美契合。而且电源VBUS/GND都拥有4个Pin,最大支持5A电流,在保证高速数据传输的同时也提高了电流承载能力。引脚功能定义第一类(紫色和红色):电......
  • 2496
    一个由字母和数字组成的字符串的 值 定义如下:如果字符串 只 包含数字,那么值为该字符串在 10 进制下的所表示的数字。否则,值为字符串的 长度 。给你一个字符串数组 strs ,每个字符串都只由字母和数字组成,请你返回 strs 中字符串的 最大值 。 示例1:输入:strs......
  • openEuler22.03安装docker24.0.4
    安装Docker添加docker源阿里云源,需要注意的是,你可能需要手动修改Docker-Ce.Repo里的源地址,将其$Release修改为指定的Centos版本号,本文指定的centos版本号为8。#添加源,添加后,手动编辑/etc/yum.repos.d/docker-ce.repo里的$Release版本号才能对应到正确的下载连接dnfconfig-......
  • Leetcode240.搜索二维矩阵II
    classSolution{public:boolsearchMatrix(vector<vector<int>>&matrix,inttarget){if(matrix.empty()||matrix[0].empty())returnfalse;intn=matrix.size(),m=matrix[0].size();intx=0,y=m-1;while(x&......
  • 比Wi-Fi快100倍!Li-Fi无线传输标准802.11bb正式发布:带宽高达224GB/s
    大家对Wi-Fi可以说耳熟能详,最新标准已经演进到802.11be,即Wi-Fi7,理论速率可达30Gbps。现在,更强的来了。IEEE今日正式签署802.11bb无线传输标准,即Li-Fi,基于光波的无线传输。Li-Fi支持者认为,光比射频更可靠,由此也使得Li-Fi比Wi-Fi和5G都要更快、更安全,Li-Fi的发布,也有助于和Wi-F......
  • Nuke导出视频缺失 H.246格式 的解决办法
    同事在使用Nuke导出视频时报错,报错提示:缺失H.246格式后来经过我的研究发现,QuicktimePlayer在标准安装时,默认不关联一些格式(具体是哪些格式不清楚)QuicktimePlayer在安装过程中,不要选择标准安装,应该是选择自定义安装,然后在安装的过程中,要完全安装这样就不会报错了。 p......
  • Oracle学习笔记:parallel并行处理 --转载 https://blog.csdn.net/w892824196/article/
    在使用oracel查询时,可以通过并行提高查询速度。例如:select/*+parallel(a,6)*/count(1)fromtable_namea;强行启用并行度来执行当前SQL。加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效率。但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记......
  • 网安面试题整理
    什么是XSS,有几种类型,如何防范?XSS概念:攻击者在网页中嵌入客户端脚本(JavaScript),当用户使用浏览器加载被嵌入恶意代码的网页时,用户的浏览器就会执行该恶意代码。XSS弹窗方式:alert()confirm()prompt()document.write()console.log()XSS本质:用户输入的HTML语句直接输......
  • java集合面试题
    java集合面试题1.什么是集合集合就是一个放数据的容器,准确的说是放数据对象引用的容器集合类存放的都是对象的引用,而不是对象的本身集合类型主要有3种:set(集)、list(列表)和map(映射)。2常用的集合类有哪些?Map接口和Collection接口是所有集合框架的父接口:Collection接口......