LeetCode高頻題 鍊錶(一)

2021-10-02 11:15:09 字數 1356 閱讀 4234

我開了乙個leetcode會員,選擇了一些高頻率題目。這個系列是希望幫助大家每天花30分鐘的題目了解面試高頻題,讓大家面試更加游刃有餘。

本期我們開始講解鍊錶的題目,先介紹幾道簡單題熱熱身。本期所用的鍊錶的資料結構均如下:

public

class

listnode

}

題意:刪除鍊錶中等於給定值 val 的所有節點。如下圖:

鍊錶題的難點在於邊界條件的處理,要不要加頭部結點啊、遇到null怎麼處理啊、要用幾個臨時結點啊等等,這些是問題的關鍵。那麼這道題有用兩個臨時結點和用乙個臨時結點兩種做法。

//兩個臨時結點

public listnode removeelements

(listnode head,

int val)

else

}return firstnode.next;

}//乙個臨時結點

public listnode removeelements2

(listnode head,

int val)

if(head == null)

listnode p = head;

while

(p.next != null)

else

}return head;

}

題意:在不建立乙個新鍊錶的情況下,反轉乙個單鏈表。如圖:

這道題真是非常非常經典啊,曾經是面試必問題,現在已經淪落到簡單題了。這道題沒別的,記住就好了,迭代方法用三個臨時結點【之前的結點,當前的結點,之後的結點】儲存,我們直接看**,各位同學演算一遍,在紙上畫一畫就懂了。

public listnode reverselist

(listnode head)

return beforenode;

}

這道題還可以用遞迴的方法,更簡單了,我們來看**:

public listnode reverselist

(listnode head)

private listnode reverselistint

(listnode head, listnode newhead)

反轉煉表面試已經被問爛了,但現在面試問什麼?問的當然是反轉鍊錶的公升級版,反轉鍊錶中的任意位置。下期推送告訴你!

LeetCode高頻題 鍊錶(四)

我們講解的題目都是leetcode上經典的題目,而且我們的解答一定也是最簡單最經典的。今天帶來兩道關於鍊錶的經典題。本期所用的鍊錶的資料結構均如下 public class listnode 題意 給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ...

鍊錶高頻演算法題

class solutionif l2 listnode dummy new listnode listnode res dummy res next null while l1 l2 else if l1 if l2 return dummy next class solution listnod...

leetcode23合併K個鍊錶 高頻題

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 乙個較為合適的方法,即最小堆來做。先存在lists.length個數的最小堆,每次取最小的元素出來,再鏈上新的鍊錶。definition for ...