1 """
2 Given a linked list, determine if it has a cycle in it.
3 To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.
4 Example 1:
5 Input: head = [3,2,0,-4], pos = 1
6 Output: true
7 Explanation: There is a cycle in the linked list, where tail connects to the second node.
8 Example 2:
9 Input: head = [1,2], pos = 0
10 Output: true
11 Explanation: There is a cycle in the linked list, where tail connects to the first node.
12 Example 3:
13 Input: head = [1], pos = -1
14 Output: false
15 Explanation: There is no cycle in the linked list.
16 """
17 """
18 好题
19 解法一:快慢指针法,自己AC
20 """
21 class ListNode:
22 def __init__(self, x):
23 self.val = x
24 self.next = None
25
26 class Solution1:
27 def hasCycle(self, head):
28 if not head:
29 return False
30 slow = head
31 fast = head.next
32 while fast:
33 if slow.val == fast.val:
34 return True
35 if fast.next:
36 fast = fast.next
37 if slow.val == fast.val:
38 return True
39 slow = slow.next
40 fast = fast.next
41 return False
42
43 """
44 解法二:用set()或dict()或list()来存已经遍历过的结点,判断当前结点是否在集合中
45 值得注意的是,set时间最短
46 """
47
48 class Solution:
49 def hasCycle(self, head: ListNode) -> bool:
50 if not head:
51 return False
52 s = set()
53 cur = head
54 while cur:
55 if cur in s:
56 return True
57 s.add(cur)
58 cur = cur.next
59 return False
60 """
61 dict的一些方法:
62 dic = {'name':'fuyong','age':29,'job':'none'}
63 dic.setdefault('addr','henan')
64 print(dic) #结果 {'addr': 'henan', 'age': 29, 'name': 'fuyong', 'job': 'none'}
65 dic.update({'addr':'henan'})
66 print(dic) #结果 {'job': 'none', 'addr': 'henan', 'age': 29, 'name': 'fuyong'}
67 dic.pop('job')
68 print(dic) #结果为:{'age': 29, 'name': 'fuyong'}
69 print(dic.popitem()) #结果为('name', 'fuyong')
70 del dic['job']
71 print(dic) #结果为:{'age': 29, 'name': 'fuyong'}
72 dic.clear()
73 print(dic) #结果为:{}
74 用来遍历的方法dic.keys() dic.values() dic.items()
75 """