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

链表中环的入口结点

时间:2023-03-24 12:02:28浏览次数:34  
标签:结点 return hashmap 中环 head next 链表 ListNode NULL

方法1,遍历一次,使用额外空间

  • 哈希直接存储指针出现的次数,如果重复出现,直接返回即可
class Solution {
public:
    unordered_map<ListNode*,int> hashmap;//记录指针及其出现的次数+1
    ListNode *entryNodeOfLoop(ListNode *head) {
        auto p=head;
        int id=1;//因为hashmap默认就是0,如果id初值为0,造成混淆
        while(p)//无环将在这里退出
        {
            if(hashmap[p])
                return p;//有环
            hashmap[p]=id++;
            p=p->next;
        }
        if(p==NULL) return NULL;//无环
    }
};

方法2,遍历一次,常数空间

  • 如果只需要标记该点是否遍历过,那么直接修改值就好
class Solution {
public:
    ListNode *entryNodeOfLoop(ListNode *head) {

        while(head){
            if(head->val > 1000){
              head->val -= 1000;
              return head;  
            } 
            head->val += 1000;
            head = head->next;
        }
        return NULL;

    }
};

方法3,快慢指针

  • 时间复杂度相同,常数空间
class Solution {
public:
    ListNode *entryNodeOfLoop(ListNode *head) {
        if(head==NULL||head->next==NULL)    return NULL;
        auto i=head;auto j=head;
        while(i&&j)
        {
            //i走一步,j走两步
            i=i->next;
            j=j->next;
            if(j)   j=j->next;
            else return NULL;//无环返回NULL
            if(i==j)//如果两指针相遇,说明有环
            {
                j=head;
                while(i!=j)
                {
                    i=i->next;
                    j=j->next;
                }
                return i;
            }
        }
        return NULL;
    }
};

标签:结点,return,hashmap,中环,head,next,链表,ListNode,NULL
From: https://www.cnblogs.com/tangxibomb/p/17251066.html

相关文章

  • 快慢指针-lc876链表的中间节点
    给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:head=[1,2,3,4,5]输出:[3,4,5]解释:链表只有一个中间......
  • 数据结构-->单链表OJ题--->讲解_02
    老铁们,本期讲解反转单链表双指针法代码如下所示:>现在附上测试环节:>以及最终实现的图样链表,如下:另外,别忘了对“Reverse_SLT”反转函数于头文件中声明!!这就是采用双指针......
  • 指针与链表
    指针与链表各位CTFer可以忽略这篇文章~各位CTFer可以忽略这篇文章~各位CTFer可以忽略这篇文章~指针指针的定义指针对于变量来讲就像单人间的宿舍号一样。每个人(变量......
  • 数据结构-->单链表OJ题--->讲解_01
    老铁们,本期我们开讲单链表OJ题的讲解:删除单链表中给定的val值,并将剩余的链表进行链接本题中val的值是11,删除后的图示链接为:>显然,我们需要指针cur移动来寻找指定数值val......
  • 【leetcode-链表】两两交换链表中的节点
    题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例:1->2->3->42->1->4->3思路:首先需要建......
  • 141.环形链表
    给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整......
  • JZ6 从尾到头打印链表
      链表是存储数据的一种方式,由于内存不是连续的,因此访问只能从表头访问表尾。本题需要从尾部到头打印链表,只能借助特殊的数据结构输出,但是访问顺序不会因此改变。首先......
  • 结点的"最早开始和最晚开始和最早完成和最晚完成"
    最早:方块表示最晚:三角形表示最早开始:2最晚开始:15-5=10最早完成:2+5=7最晚完成:15 ......
  • 论单向链表有序插入方案
    0.思考单向链表有序插入,插入点分为这样几个地方:当前链表为空,被插入节点是第一个节点被插入节点作为头结点被插入节点在中间被插入节点在尾部那么按照这样的步骤一......
  • 单链表OJ题解析1
    1.移除链表元素题目链接题目描述 解题思路这道题较好的解法是创建一个新链表,把不等于val的节点链接到一起,然后返回新链表的头结点structListNode*removeEle......