[LeetCode] Challenge log 160

160. Intersection of Two Linked Lists

Algorithm1:

  1. traverse both lists and count len(a) and len(b)
  2. chop |len(b) - len(a)| nodes from the head of the longer list
  3. travese both lists simutaneously until two pointers hit

Algorithm2:

  1. let A = A+B, B = B+A such that two lists are alighn by their tails
  2. travese both lists simutaneously until two pointers hit

Analysis:

Both algs align the two lists by their tails.


Write a program to find the node at which the intersection of two singly linked lists begins.

For example, the following two linked lists:

1
2
3
4
5
A:          a1 → a2

c1 → c2 → c3

B: b1 → b2 → b3

begin to intersect at node c1.

Notes:

  • If the two linked lists have no intersection at all, return null.
  • The linked lists must retain their original structure after the function returns.
  • You may assume there are no cycles anywhere in the entire linked structure.
  • Your code should preferably run in O(n) time and use only O(1) memory.

Soulution:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# alg 1
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
# measure len
cur = headA
lenA = 0
while cur:
lenA += 1
cur = cur.next

cur = headB
lenB = 0
while cur:
lenB += 1
cur = cur.next

# make 2 the same len
if lenA > lenB:
while lenA > lenB:
headA = headA.next
lenA -= 1
else:
while lenB > lenA:
headB = headB.next
lenB -= 1

# check one by one:
while headA:
if headA == headB:
return headA
else:
headA = headA.next
headB = headB.next

return None
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# alg 2
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if not headA or not headB: return None
pa = headA
pb = headB
while pa != pb: # either hit or end up both None
if not pa:
pa = headB
else: pa = pa.next
if not pb:
pb = headA
else: pb = pb.next

return pa
0%