leetcode之141环形链表Golang
我在golang中定义存在环的链表还出现了问题,哈哈,如下:
// 我先声明了一个变量,也就是结点node3
var node3 *ListNode
node1 := &ListNode{
Val: 1,
// 然后这里直接让node1的Next指向node3,但是此时node3只是一个变量名,它的值其实为nil
Next: node3,
}
node2 := &ListNode{
Val: 2,
Next: node1,
}
// 此时node3才是真正指向了一个内存地址
node3 = &ListNode{
Val: 3,
Next: node2,
}
node4 := &ListNode{
Val: 4,
Next: node3,
}
node5 := &ListNode{
Val: 5,
Next: node4,
}
// 此时的链表并没有成环
// 所以其实需要在后面让node1.Next=node3,指向node3的真正的地址
node1.Next=node3
算法代码如下:
func hasCycle(head *ListNode) bool {
// 没有结点或者只有一个结点,不可能是环形链表
if head == nil || head.Next == nil {
return false
}
// 定义双指针,一个每次向前走两步,一个每次向前走一个,当快指针等于nil的时候说明不存在环,当快指针等于慢指针的时候,表示存在换
slow, fast := head, head
for {
for times := 0; times < 2; times++ {
fast = fast.Next
if fast == nil {
return false
}
if fast == slow {
return true
}
}
slow = slow.Next
}
}
浙公网安备 33010602011771号