Given a linked list, determine if it has a cycle in it.
解法一:
先建一个节点,然后遍历这个链表,每遍历一个节点,就让这个节点指向刚刚新建的那个节点,这样如果有循环,那么它回来之后的next就会指向那个节点,那么就代表有循环。代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param head, a ListNode
# @return a boolean
def hasCycle(self, head):
tmp = ListNode(0)
result = False
if head == None:
return(result)
while head:
if head.next == None:
return(result)
if head.next == tmp:
result = True
return(result)
cur, head.next = head.next, tmp
head = cur
解法二:
使用双节点,一个快,一个慢,快的每次比慢的进两步,假如有环,两者一定相遇(想法很神奇o(≧v≦)o~~)
def hasCycle(self, head):
try:
slow = head
fast = head.next
while slow is not fast:
slow = slow.next
fast = fast.next.next
return True
except:
return False