Leetcode 鍊錶題目

2021-10-07 04:15:08 字數 1780 閱讀 6199

鍊錶是個線性資料結構

由零個或多個資料元素組成的有限序列

第乙個元素無前驅,最後乙個元素沒有後繼,其餘元素乙個前驅乙個後繼

leetcode 160、 找出兩個鍊錶的交點

本題中要找出兩條鍊錶的交點,首先要知道鍊錶的特性,下乙個節點的位置只能由上乙個節點來確定,所以不能直接確定某個值得特定的位置,因此本題可以採用兩輪迴圈來確定交點的位置,分別同時從a,b 兩個鍊錶的頭結點開始遍歷,遍歷完之後,再從贏乙個節點開始遍歷這樣在第二輪是會在交點處相遇。

第一種方法採用雙指標的方法。

這個方法有幾個注意的地方。首先,本題要求找出相交的點,如果找不到的話要返回null,首先兩個鍊錶從頭開始遍歷,而遍歷結束的要求就是兩個節點的值相同代表是同乙個節點,採用三目運算子正好可以解決這個問題,採用if語句的話就打不到這個要求,而且這裡的比較條件需要注意的,cur1 == null,而不是cur1.next == null,這裡很關鍵,如果寫成cur1.next == null,那麼遍歷到末尾會直接到另乙個鍊錶的表頭,一直迴圈下去,這樣的話如果沒有交點的話則會一直迴圈下去四個死迴圈,就達不到題目的要求了,因此需要注意。而cur1 == null 如果遍歷到末尾會獎勵乙個null節點,這樣兩輪之後必定同時到達相交的節點,即使沒有相交的節點那麼會同時到達最後的null節點處,並且直接返回該節點正好是null。符合題目要求。

//雙指標

public

class

solution

return cur1;

}}

第二種方法採用雜湊表,現將a鍊錶遍歷放入雜湊表中,在從頭開始遍歷b鍊錶檢視雜湊表總是否有存在的元素,如果有就返回這個元素,如果沒有就返回null。

//雜湊表法

public

class

solution

listnode temp = headb;

while

(temp != null)

temp = temp.next;

}return null;

}}

206、反轉鍊錶

反轉乙個單鏈表。

分析:反轉鍊錶即為將鍊錶倒過來,但是考慮到後乙個節點只能由前乙個節點確定,所以要想達到翻轉鍊錶的效果,則需要有三個相鄰的節點的位置,令cur.next.next = cur,與此同時一定要記錄cur.next.next的位置,因為一旦執行上邊的命令之後就不再可以通過cur.next來尋找cur.next.next了,因為已經指向了cur了。

第二種方法就是一直遍歷到鍊錶的末尾從最後開始反轉這樣就不用了記錄後邊的位址了。就是採用遞迴的方法。

class

solution

return cur;

}}

遞迴法

遞迴的臨界條件是遍歷到最後乙個節點,這是因為需要記錄反轉後的第乙個節點的位置,如果遍歷到倒數第二個節點就結束了,雖然可以達到翻轉的效果但是,反轉後的頭結點會丟失掉,要明白翻轉的本質就是cur.next.next = cur, 根據遞迴函式構造的不同,程式會有差異。

class

solution

}

21、合併兩個有序鍊錶

將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

class

solution

if(l2 == null)

if(l1.val <= l2.val)

else

}}

leetcode 鍊錶題目2

將兩個鍊錶合二為一,比如鍊錶a 鍊錶b,合併成兩個鍊錶a b和b a。解題思路 將listb加到lista的後面 將lista也加到listb的後面,這樣兩個list等長 class solution return a ptr class solution return head pre next ...

leetcode鍊錶題目之206 反轉鍊錶

題目 方法一 在遍歷列表時,將當前節點的 next 指標改為指向前乙個元素。由於節點沒有引用其上乙個節點,因此必須事先儲存其前乙個元素。在更改引用之前,還需要另乙個指標來儲存下乙個節點。不要忘記在最後返回新的頭引用!definition for singly linked list.struct l...

leetcode題目 328 奇偶鍊錶

給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。說明 1 應當保持奇數節點和偶數節點的相對順序...