這道題 要想解決其實不難, 開兩層迴圈進行遍歷就能實現,但是會超時
如果想要o(n) 的時間複雜度, 我考慮用雜湊表來儲存遍歷過的元素,如果發現當前遍歷的元素在雜湊表裡,那說明交叉點就在這
這裡利用了雜湊表的查詢時間是o(1)
但是這種演算法不能滿足空間複雜度是o(1)的要求
**像這樣:
1經過一段時間思考,如果要滿足空間複雜度是o(1) 那就不能開闢新空間,智慧型用指標來回移動的辦法class
solution(object):
2def
getintersectionnode(self, heada, headb):
3"""
4:type head1, head1: listnode
5:rtype: listnode
6"""7#
如果有乙個鍊錶是空的 那就沒有交叉
8if heada is none or headb is
none:
9return
none10#
計算一下兩個鍊錶的長度
11 ca =heada
12 cb =headb
13 ta, tb = 1, 1
14while ca.next is
notnone:
15 ta += 1
16 ca =ca.next
17while cb.next is
notnone:
18 tb += 1
19 cb =cb.next20#
如果最後乙個元素都不一樣說明沒有交叉
21if ca.val !=cb.val:
22return
none23#
如果兩個鍊錶長度不一樣,將長得鍊錶指標後移
24 ca =heada
25 cb =headb
26while tb >ta:
27 tb -= 1
28 cb =cb.next
29while ta >tb:
30 ta -= 1
31 ca =ca.next32#
從倒數長度相同的 短的鍊錶的開頭開始一位一位比較
33while ca is
not none and cb is
notnone:
34if ca.val ==cb.val:
35return
ca36 ca =ca.next
37 cb = cb.next
1 如果任何乙個鍊錶是空的說明沒有交叉
2 如果鍊錶交叉了最後乙個元素肯定相同, 如果不相同說明沒交叉
3 如果確定了有交叉,計算一下兩個鍊錶的長度,
思想是 調整到一樣長,然後按位比較 這樣一次遍歷就可以
具體這樣做: 每個鍊錶都有乙個遍歷指標,
短的鍊錶的指標在頭部
長的鍊錶指標後移若干位,一直到 兩個鍊錶從尾巴開始數 到遍歷指標的長度是相同的
接下來就一遍遍歷 每一位都比較一下是否相等就可以
這樣沒有開闢新的空間 時間上是一遍遍歷o(n)
1class
solution(object):
2def
getintersectionnode(self, heada, headb):
3"""
4:type head1, head1: listnode
5:rtype: listnode
6"""7#
建立乙個雜湊表,把每個第一次遍歷到的元素存進去8#
如果發現之前存過當前元素說明交叉了
9 dic ={}
10 ca =heada
11 cb =headb
12while ca is
not none or cb is
notnone:
13if ca is
notnone:
14try:15
dic[ca.val]
16return
ca17
except
:18 dic[ca.val] =true
19 ca =ca.next
20if cb is
notnone:
21try:22
dic[cb.val]
23return
cb24
except
:25 dic[cb.val] =true
26 cb =cb.next
27return none
LeetCode 相交鍊錶
編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3在節點 c1 開始相交。注意 思路1 先使兩個鍊錶等長,然後一起遍歷兩個鍊錶 第乙個相等的即為所求的起始結點。definition for singly linked list.s...
Leetcode 相交鍊錶
leetcode 輸入 intersectval 2,lista 0,9,1,2,4 listb 3,2,4 skipa 3,skipb 1 輸出 reference of the node with value 2 輸入解釋 相交節點的值為 2 注意,如果兩個列表相交則不能為 0 從各自的表頭開始...
Leetcode相交鍊錶
public class listnode listnodes new hashset while heada null while headb null return null 寫點 哈哈,拿到題我想到用啥結構做呢?然後想著最近一直在用雜湊解決問題,這題用雜湊呢?可以,搞它!先把鍊錶a放到表裡,然...