题目描述
https://leetcode-cn.com/problems/linked-list-cycle-ii/
思路题解
go 地址比较法
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
import "unsafe"
func detectCycle(head *ListNode) *ListNode {
//地址突然变小则为环
p:=&head
// fmt.Printf("%p,%T\n",p,p)
for head!=nil && head.Next!=nil{
fmt.Println(&head.Next,p)
if uintptr(unsafe.Pointer(head.Next))<uintptr(unsafe.Pointer(p)){
return head.Next
}
p=&head.Next
head=head.Next
}
return nil
}
python3 快慢指针法
class Solution(object):
def detectCycle(self, head):
fast, slow = head, head
while True:
if not (fast and fast.next): return
fast, slow = fast.next.next, slow.next
if fast == slow: break
fast = head
while fast != slow:
fast, slow = fast.next, slow.next
return fast