-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy path160_IntersectionOfTwoLinkedLists.py
More file actions
76 lines (58 loc) · 1.86 KB
/
Copy path160_IntersectionOfTwoLinkedLists.py
File metadata and controls
76 lines (58 loc) · 1.86 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# coding: utf8
"""
题目链接: https://leetcode.com/problems/intersection-of-two-linked-lists/description.
题目描述:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
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.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
"""
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if not headA or not headB:
return None
la = lb = 0
ptr_a = headA
ptr_b = headB
while ptr_a:
la += 1
ptr_a = ptr_a.next
while ptr_b:
lb += 1
ptr_b = ptr_b.next
if ptr_a != ptr_b:
return None
ptr_a = headA
ptr_b = headB
if la > lb:
while la > lb:
ptr_a = ptr_a.next
la -= 1
else:
while lb > la:
ptr_b = ptr_b.next
lb -= 1
while ptr_a != ptr_b:
ptr_a = ptr_a.next
ptr_b = ptr_b.next
return ptr_a