160.鍊錶的相交節點
我的思路是先計算出兩個列表的長度差,然後使用雙指標,長的那個先移動,然後再一起移動
class
solution
:def
getintersectionnode
(self, heada: listnode, headb: listnode)
-> listnode:
p1 = heada
p2 = headb
num1,num2,k =0,
0,0if
not(p1 or p2)
:# 判斷鍊錶是否為空鍊錶
return
none
while p1 !=
none
:# 計算鍊錶p1的長度
p1 = p1.
next
num1 +=
1while p2 !=
none
:# 計算鍊錶p2的長度
p2 = p2.
next
num2 +=
1 length =
abs(num2-num1)
# 計算兩個列表相差多長
long_length_link = headb # 找出比較長的鍊錶
short_length_link = heada
if num1>num2:
long_length_link,short_length_link = heada,headb
p1 = long_length_link
p2 = short_length_link
while k < length:
# 長的鍊錶先移動
p1 = p1.
next
k +=
1while p2.
next
!=none
and p1.
next
!=none
:# 兩個鍊錶一起移動
if p2 == p1:
return p1
p1 = p1.
next
p2 = p2.
next
return
none
class
solution
:def
getintersectionnode
(self, heada: listnode, headb: listnode)
-> listnode:
p,q = heada,headb
while q != p:
# p = p.next if heada else headb
p = p.
next
if p else headb
q = q.
next
if q else heada
return q
力扣刷題筆記2 鍊錶經典題目
1.移除鍊錶元素 解題思路 這道題很簡單,就是從頭到尾遍歷鍊錶,如果找到val值和目標值相同的節點就刪除該節點,最後返回煉表頭節點即可 具體 如下 2.翻轉鍊錶 解題思路 定義乙個頭指標head和尾指標node,while head node 迴圈結束後即完成了鍊錶的翻轉 具體 如下 題目3 鍊錶相...
python力扣206反轉鍊錶
原題鏈結 1.雙指標反轉 非迭代法的主要思想就是設定兩個指標,指標每向前移動一下就反轉一下 class solution def reverselist self,head listnode listnode pre none cur head while cur 當cur null時迴圈結束 tm...
力扣 鍊錶 (21 83 )
這篇部落格持續更新,博主力扣刷題到哪更新到哪。希望大家支援 當l1 l2任意乙個為空 非遞迴解法 class solution listnode cur head listnode pre head listnode check head.next while cur null else if cu...