File tree Expand file tree Collapse file tree 1 file changed +72
-0
lines changed Expand file tree Collapse file tree 1 file changed +72
-0
lines changed Original file line number Diff line number Diff line change 1+ '''
2+ Write a program to find the node at which the intersection of two singly linked lists begins.
3+
4+
5+ For example, the following two linked lists:
6+
7+ A: a1 → a2
8+ ↘
9+ c1 → c2 → c3
10+ ↗
11+ B: b1 → b2 → b3
12+ begin to intersect at node c1.
13+
14+
15+ Notes:
16+
17+ If the two linked lists have no intersection at all, return null.
18+ The linked lists must retain their original structure after the function returns.
19+ You may assume there are no cycles anywhere in the entire linked structure.
20+ Your code should preferably run in O(n) time and use only O(1) memory.
21+ '''
22+
23+ # Definition for singly-linked list.
24+ class ListNode (object ):
25+ def __init__ (self , x ):
26+ self .val = x
27+ self .next = None
28+
29+
30+ class Solution (object ):
31+ def getIntersectionNode (self , headA , headB ):
32+ """
33+ :type head1, head1: ListNode
34+ :rtype: ListNode
35+ """
36+ nodeA , nodeB = headA , headB
37+ while nodeA != nodeB :
38+ nodeA = nodeA .next if nodeA else headB
39+ nodeB = nodeB .next if nodeB else headA
40+ return nodeA
41+
42+ def getIntersectionNode_diff (self , headA , headB ):
43+ """
44+ :type head1, head1: ListNode
45+ :rtype: ListNode
46+ """
47+
48+ def get_length (node ):
49+ length = 0
50+ while node :
51+ node = node .next
52+ length += 1
53+ return length
54+
55+ len1 = get_length (headA )
56+ len2 = get_length (headB )
57+ if len1 > len2 :
58+ for __ in range (len1 - len2 ):
59+ headA = headA .next
60+ else :
61+ for __ in range (len2 - len1 ):
62+ headB = headB .next
63+ while headA :
64+ if headA == headB :
65+ return headA
66+ headA = headA .next
67+ headB = headB .next
68+ return None
69+
70+
71+ if __name__ == "__main__" :
72+ None
You can’t perform that action at this time.
0 commit comments