首页 > 其他分享 >Day04 链表part02| LeetCode 24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个,160. 相交链表,142. 环形链表 II

Day04 链表part02| LeetCode 24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个,160. 相交链表,142. 环形链表 II

时间:2024-09-08 18:28:22浏览次数:14  
标签:24 II ListNode fast next 链表 tmpMax 指针

两两交换链表中的节点

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

 class Solution {
        public ListNode swapPairs(ListNode head) {
            //设置虚拟头节点
            ListNode dummy=new ListNode(0,head);

            ListNode cur=dummy;
            while(cur.next!=null&&cur.next.next!=null)
            {
                       ListNode tmp1=cur.next;
                       ListNode tmp2=cur.next.next;

                       tmp1.next=tmp2.next;
                       cur.next=tmp2;
                       tmp2.next=tmp1;

                       cur=cur.next.next;


            }
            return dummy.next;



        }
    }

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

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

  • 双指针
    • 快指针比慢指针多走n步
 class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n) {
            // 虚拟头节点
            ListNode dummy=new ListNode(0,head);

            //快、慢指针
            ListNode fast=dummy;
            ListNode slow=dummy;


            // 快指针比慢指针快n+1步,确保快慢指针相差n
         for(int i=0;i<n+1;i++)
         {
             fast=fast.next;
         }

            while(fast!=null)
            {
                slow=slow.next;
                fast=fast.next;
            }
            // fast.next==null,fast已经到了最后一个节点
            //slow节点此时为 要删除节点的 前一个节点

            //删除操作

//            if(slow.next!=null)
//            {
                slow.next=slow.next.next;

//            }
            return dummy.next;


        }
    }

链表相交

160. 相交链表

  • 求两个链表交点节点的指针,而不是数值相等的指针
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
           int sizeMax=0,sizeMin=0;
           ListNode tmpMax=headA;
           ListNode tmpMin=headB;
           while(tmpMax!=null)
           {
               sizeMax++;
               tmpMax=tmpMax.next;


           }
            while(tmpMin!=null)
            {
                sizeMin++;
                tmpMin=tmpMin.next;

            }
            tmpMax=headA;
            tmpMin=headB;
            if(sizeMax<sizeMin)
            {
                //确保tmpMax 为最长链表的头,SizeMax为其长度
                int temp=sizeMin;
                sizeMin=sizeMax;
                sizeMax=temp;

              ListNode tmpNode=tmpMin;

                tmpMin=tmpMax;
                tmpMax=tmpNode;

            }
           int gap=sizeMax-sizeMin;


            while(gap>0)//末尾位置对齐
            {
                gap--;
                tmpMax=tmpMax.next;
                
            }

            while(tmpMax!=null&&tmpMin!=null)
            {
                if(tmpMax==tmpMin)
                {
                    return tmpMax;
                }
                tmpMax=tmpMax.next;
                tmpMin=tmpMin.next;
            }
            return null;
    }
}

环形链表

142. 环形链表 II

  • 判断链表是否有环——双指针法

    • fast指针每次移动两个字节,slow指针每次移动一个字节
    • 如果存在环,则fast和slow指针必在环内相遇,且fast指针一定先进入环
  • 如何找到环的入口

  public class Solution {
        public ListNode detectCycle(ListNode head) {
        ListNode fast=head;
        ListNode slow=head;
        while(fast!=null&&fast.next!=null)
        {
            slow=slow.next;
            fast=fast.next.next;

            if(slow==fast)//指针相遇
            {
                ListNode index1=fast;
                ListNode index2=head;
                while(index1!=index2)
                {
                    index1=index1.next;
                    index2=index2.next;
                }
                return index2;
                //环形入口

            }
        }
        return null;
        }
    }

标签:24,II,ListNode,fast,next,链表,tmpMax,指针
From: https://www.cnblogs.com/FreeDrama/p/18403211

相关文章

  • 20240911_220441 公共基础 线性链表
    什么是线性链表单向线性链表双向线性链表带链的栈带链队列线性链表的运算循环链表考点小结习题c习题a习题b习题c......
  • 文件加密管理软件哪个好?加密文件的8款软件推荐(2024干货整理)
    据统计,2024年上半年发生了多起重大数据泄露事件,其中包括名为“泄漏之母”的超级数据泄露库,其规模之大前所未有,共包含260亿条记录,文件体积高达12TB。此外,宝马、中信银行等知名企业的数据泄露事件也引起了广泛关注,凸显了数据保护的重要性。面对如此严峻的数据安全形势,选择一款......
  • 视频怎么加密?加密视频的5大简易方法(2024最全教程)
    《孙子兵法》中有言:“兵者,诡道也”。在当今数字化时代,每一次不经意的疏忽,都可能导致重要的视频资料泄露,给企业带来不可估量的损失。那么,我们应如何使用“诡道”,对视频进行加密呢?以下,是视频加密的五大简易方法。方法一:视频编辑软件内置加密许多专业的视频编辑软件(如AdobePr......
  • 2024.08.23快手
    1.判断括号字符串有效给定一个只包括'(',')','{','}','[',']'的字符串s(1<=s.length<=1e4),判断字符串是否有效。如果有效,输出有效括号的个数。如果无效,则输出False。简单的栈intmain(){intt;cin>>t;charmatch[3][2]={{......
  • 大二上 C++高级程序设计笔记(1) 栈和c++对c的补充 20240908
    Q1:什么是static类的储存变量?A1:在C++中,static关键字可以用于类成员变量和成员函数,以改变其作用域和生命周期。当static用于类的成员变量时,它具有以下特性:全局唯一性:静态成员变量不属于任何特定的对象实例,而是属于类本身。这意味着无论创建多少个类的对象,静态成员变量都只有......
  • トヨタ自動車プログラミングコンテスト2024#9(ABC370)
    A.RaiseBothHands\(\texttt{Diff}11\)#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definevoidinlinevoid//#defineONLINE_JUDGE#ifndefONLINE_JUDGE#definetest(i)cout<<"test:"<<i<<......
  • 【2024华为杯E题】中国研究室数学建模竞赛E题思路+代码+论文
    订阅本专栏,认真钻研,保省级及以上奖项!若无获奖,本博主免费提供任意两份本博客初级版专栏代码!......
  • 【2024华为杯B题】中国研究室数学建模竞赛B题思路+代码+论文
    订阅本专栏,认真钻研,保省级及以上奖项!若无获奖,本博主免费提供任意两份本博客初级版专栏代码!......
  • LOJ4218 「IOI2024」尼罗河船运 题解
    题目描述有\(n\)件手工艺品,第\(i\)件重量为\(w_i\),有参数\(a_i\)和\(b_i\)。每艘船最多可以运输两件手工艺品:如果只运输第\(i\)件,重量没有要求,代价为\(a_i\)。如果同时运输第\(i\)和第\(j\)件,要求\(|w_i-w_j|\leD\),代价\(b_i+b_j\)。\(q\)次询问,给......
  • 利用ChatGPT完成2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整思路
    利用ChatGPT来辅助数学建模比赛,可以帮助你加快建模、数据分析、算法设计等过程。以下是一些具体的步骤,结合ChatGPT的能力,如何在不同类型的数学建模问题中使用它。使用网站:https://new.chatgpt-plus.top/1.数据预处理与分析在数学建模比赛中,常常会遇到复杂的数据处......