• LeetCode链表问题——142.环形链表II(一题一文学会链表)


    一、题目描述: 

    142. 环形链表 II

    难度中等1688收藏分享切换为英文接收动态反馈

    给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    不允许修改 链表。

     

      

    二、代码 

    1. public class Solution {
    2. public ListNode detectCycle(ListNode head) {
    3. ListNode slow = head;
    4. ListNode fast = head;
    5. while (fast != null && fast.next != null) {
    6. slow = slow.next;
    7. fast = fast.next.next;
    8. if (slow == fast) {// 有环
    9. ListNode index1 = fast;
    10. ListNode index2 = head;
    11. // 两个指针,从头结点和相遇结点,各走一步,直到相遇,相遇点即为环入口
    12. while (index1 != index2) {
    13. index1 = index1.next;
    14. index2 = index2.next;
    15. }
    16. return index1;
    17. }
    18. }
    19. return null;
    20. }
    21. }

    三、了解链表

    什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口节点称为链表的头结点也就是head。

     单链表:链表1

    双链表:

    每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。

    双链表 既可以向前查询也可以向后查询。

    链表2

    循环链表: 

    循环链表,顾名思义,就是链表首尾相连。循环链表可以用来解决约瑟夫环问题。

    链表4

     链表的存储方式:

    数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。

    链表是通过指针域的指针链接在内存中各个节点。

    所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。

    删除节点:

    只要将C节点的next指针 指向E节点就可以了。

    链表-删除节点

    添加节点: 

     链表-添加节点

    与数组对比: 

    链表-链表与数据性能对比

  • 相关阅读:
    百分点科技连续7年获评“中国大数据企业50强”
    Flutter——常用布局
    国际物流和跨境电商物流的区别
    STM32使用寄存器点灯实验
    【题解】同济线代习题一.8.2
    .NET 中的 Json 使用体验
    数据指标口径不统一、重复开发?亿信ABI指标管理平台帮你解决
    VUE+websocket编写实现PC web端控制摄像头
    【持续更新】整理的Mediapipe学习资料
    项目管理软件dhtmlxGantt配置教程(十七):实现RTL(从右到左)模式
  • 原文地址:https://blog.csdn.net/w20001118/article/details/126026808