教你用浪漫的方式找到兩個單鏈表相交的起始節點

2021-10-05 05:30:00 字數 1189 閱讀 2862

pipi的奇思妙想

你以為我打算講演算法,其實我準備講愛情…

故事的開始,是一道演算法題:

題目:想見你浪漫的愛情故事之如何找到兩個單鏈表相交的起始節點

解釋:一種比較巧妙的方式是,分別為鍊錶a和鍊錶b設定指標a和指標b,遍歷鍊錶,如果遍歷完鍊錶,將指標指向另外乙個鍊錶的頭部繼續遍歷,直至兩個指標相遇。

最終兩個指標分別走過的路徑為:

指標a :a+c+b

指標b :b+c+a

明顯 a+c+b = b+c+a,因而如果兩個鍊錶相交,則指標a和指標b必定在相交結點相遇。

這一方法的時間複雜度為o(m+n),其中m和n分別為兩個指標的長度,空間複雜度為o(1)。

**:

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class solution:

def getintersectionnode(self, heada: listnode, headb: listnode) -> listnode:

if not heada or not headb:

return none

nodea = heada

nodeb = headb

while(nodea !=nodeb):

nodea = nodea.next if nodea else headb

nodeb = nodeb.next if nodeb else heada

return nodea

總結:

如果你夠浪漫,演算法題都能刷出愛情的味道。

媽媽我在努力學習呢…看我真摯的眼神

pipi的奇思妙想

找到兩個單鏈表相交的起始節點(乙個浪漫的解法)

編寫乙個程式,找到兩個單鏈表相交的起始節點。如下面的兩個鍊錶 在節點 c1 開始相交。輸入 intersectval 8,lista 4 1,8 4,5 listb 5 0,1 8,4 5 skipa 2,skipb 3輸出 reference of the node with value 8輸入解...

找到兩個單鏈表相交的起始節點20201212

2.解法 鍊錶相加 1ms 41.4mb 編寫乙個程式,找到兩個單鏈表相交的起始節點。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。相交的概念,不是兩條直線相交與乙個焦點 ...

求兩個單鏈表的和

出處 兩個單鏈表 singly linked list 每乙個節點裡面乙個0 9的數字,輸入就相當於兩個大數了。然後返回這兩個數的和 乙個新list 這兩個輸入的list長度相等。要求是 1.不用遞迴。2.要求演算法在最好的情況下,只遍歷兩個list一次,最差的情況下兩遍。這是陳利人同學今天發在待字...