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一次,最差的情況下兩遍。這是陳利人同學今天發在待字...