Leetcode 141. 环形链表

141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com)

 

 

思路 1 快慢指针:

1. 设置两个指针,一个一次走一步,一个一次走两步。

2. 如果这个链表有环,那么快指针就一定会在某一个节点从后面追上慢指针。

3. 如果快指针可以指向nil, 那么这个链表就不是一个环形链表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }
    slow := head
    fast := head.Next
    for fast != nil && fast.Next != nil {
        fast = fast.Next.Next
        slow = slow.Next
        if fast == slow {
            return true
        }
    }
    return false
}

 

思路 2 哈希表法

1. 对链表进行遍历。

2. 每遍历一个链表节点就将它存到哈希表中。

3.如果在插入哈希表时发现这个节点已经存在,则说明这个链表有环。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func hasCycle(head *ListNode) bool {
    hashMap := make(map[*ListNode]int)
    for head != nil {
        if _, ok := hashMap[head]; ok {
            return true
        }
        hashMap[head]=0
        head = head.Next
    }
    return false
}

  


__EOF__

本文作者SoutherLea
本文链接https://www.cnblogs.com/lizhengnan/p/16185563.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   SoutherLea  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示