首页 > 其他分享 >链表中环的入口结点

链表中环的入口结点

时间:2024-04-15 11:37:23浏览次数:19  
标签:结点 slow ListNode 中环 fast next 链表 null 指针

 

 

 

1.先用快慢指针判断是否存在环

2.返回快慢指针相遇的地方,一个指针停留在那里。

3.另一个指针回到头节点

4.两个节点一起走,每次走一格,再次相遇的地方就是入口节点

public class Solution {     //判断有没有环,返回相遇的地方     public ListNode hasCycle(ListNode head) {         //先判断链表为空的情况         if(head == null)             return null;         //快慢双指针         ListNode fast = head;         ListNode slow = head;         //如果没环快指针会先到链表尾         while(fast != null && fast.next != null){             //快指针移动两步             fast = fast.next.next;             //慢指针移动一步             slow = slow.next;             //相遇则有环,返回相遇的位置             if(fast == slow)                 return slow;         }         //到末尾说明没有环,返回null         return null;     }           public ListNode EntryNodeOfLoop(ListNode pHead) {         ListNode slow = hasCycle(pHead);         //没有环         if(slow == null)             return null;         //快指针回到表头         ListNode fast = pHead;         //再次相遇即是环入口         while(fast != slow){             fast = fast.next;             slow = slow.next;         }         return slow;     } }

标签:结点,slow,ListNode,中环,fast,next,链表,null,指针
From: https://www.cnblogs.com/doudou666/p/18135566

相关文章

  • 链表2: 动态单链表
    链表2:动态单链表定义数据结构//定义链表数据结构typedefstructLNode{intdata;structLNode*next;}LNode;初始化链表//初始化链表LNode*Init_LinkList(){//返回头指针//创建头结点LNode*header=(LNode*)malloc(sizeof(LNode));hea......
  • 链表1: 静态单链表
    链表1:静态单链表单链表的结构链表包含了数据域与指针域,数据域存储数据,指针域存储下一个结点的地址链表的特点链表的优势在于数据的删改,在链表中查询第$i$个元素需要从第一个结点开始遍历链表,,因此在数据的顺序读取中链表的优势不如数组.链表的插入操作设newN......
  • JZ76 删除链表中重复的节点
    1、相似题classSolution{public:ListNode*deleteDuplicates(ListNode*head){//判空if(head==NULL)returnnullptr;ListNode*p1=head;ListNode*p2=p1->next;while(p2){......
  • 数据结构-链表
    数据结构-链表1.链表的基本概念:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向列表中下一个节点的引用(或指针)。2.单向链表:单向链表的每个节点只有一个指向下一个节点的链接。这种结构使得遍历只能单向进行,从头节点开始到尾节点结束。classNode:d......
  • JZ22 链表中倒数最后k个节点
    /***structListNode{* intval;* structListNode*next;* ListNode(intx):val(x),next(nullptr){}*};*/classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@param......
  • JZ52 两个链表的第一个公共节点
    /*structListNode{ intval; structListNode*next; ListNode(intx): val(x),next(NULL){ }};*/#include<endian.h>classSolution{public: //返回类型为节点指针类型,传入的是两个链表的头节点ListNode*FindFirstCommonNode(ListNode*pHead1,......
  • BM2 链表内指定区间反转
    代码有点长,但是我比较喜欢这种做法。注意的点是如果第一个参与了反转,那么返回的就是区间反转之后的头结点,而不是原始头结点。importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=......
  • BM1 反转链表
    开始刷数据结构了。1.递归importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=val;*}*}*/publicclassSolution{publicListNodeReverseList(ListNodehea......
  • JZ25合并两个排序链表
    /***structListNode{* intval;* structListNode*next;* ListNode(intx):val(x),next(nullptr){}*};*/#include<cstddef>classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*......
  • 天梯赛-练习集-L2-002 链表去重(25分)
    L2-002链表去重代码长度限制:16KB时间限制:400ms内存限制:64MB题目描述给定一个带整数键值的链表L,你需要把其中绝对值重复的键值结点删掉。即对每个键值K,只有第一个绝对值等于K的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定L为21→-15→-15......