LeetCode 鍊錶

2021-10-11 02:48:34 字數 2895 閱讀 2218

快慢指標二分鍊錶

通過fast是否為空,判斷鍊錶節點數量是奇數還是偶數,並找到中心點

讓slow指向後半段的初始節點,反轉後半段鍊錶,fast指向頭結點

依次迴圈比較

class

solution

//注意:slow和fast都是從head開始走的,slow一次走一步,fast一次走兩步

//所以如果鍊錶節點數量是奇數,應該是fast正好是最後乙個,slow正好指向中間軸

//如果鍊錶節點數量是偶數,跳出迴圈時,fast為空,slow指向後半段第乙個

if(fast != null)

//反轉後半部分鍊錶,之後slow是反轉後的鍊錶的頭結點,fast指向前半段頭結點

slow =

reverse

(slow)

; fast = head;

//比較值是否相等

while

(slow != null)

return

true;}

//反轉鍊錶

public listnode reverse

(listnode head)

return post;

}}

三種方法:逆序、遞迴、棧

原鍊錶逆序——得到鍊錶長度——初始化陣列——遍歷逆序後的鍊錶,按位置插入結果陣列

class

solution

//通過size初始化結果陣列

int[

] res =

newint

[size]

;int index =0;

//遍歷鍊錶,往陣列裡插入數值

while

(revlisthead != null)

return res;

}//逆序鍊錶

public listnode reverse

(listnode head)

return post;

}}

遞迴法

class

solution

public

void

recur

(listnode head)

i++;recur

(head.next)

; res[j]

= head.val;

j++;}

}

3.通過棧完成

class

solution

//通過棧大小得到結果陣列大小

int[

] res =

newint

[stack.

size()

];int index =0;

//出棧,把值存入結果陣列

while

(!stack.

isempty()

)return res;

}}

考慮特殊情況:head == nullhead.val == val其他情況:設定當前節點cur檢測,前置節點pre輔助刪除

class

solution

pre.next = pre.next.next;

return head;

}}

遞迴

思想:遞迴前半段是找到那個值為val的節點,後半段就是把節點接上

遞迴出口有兩個:

(1)是head == null直接返回

(2)還有乙個出口是head.val == val,當前的head即為要刪除的節點

所以當head.val == val時,返回head.next即可

固定好雙指標之間的距離

雙指標向後滑動,滑到fast為空,返回slow即可

class

solution

//一起向後滑動

while

(fast != null)

return slow;

}}

思想:想刪除倒數第k個,有乙個指標在倒數第k+1的位置上即可;

滑動的游標卡尺的長度為k+1

為了統一頭結點的操作,我們新建乙個頭結點nhead

class

solution

while

(fast.next != null)

slow.next = slow.next.next;

return nhead.next;

}}

固定模板,熟記

class

solution

return post;

}}

思想:浪漫相遇,走過你來時的路,我就會和你相遇

public

class

solution

return a;

}}

遞迴非遞迴

遞迴

在這裡插入**片
非遞迴

新建煉表頭結點,尾插法建立鍊錶

class

solution

else

if(l1.val > l2.val)

else}if

(l1 != null) tail.next = l1;

if(l2 != null) tail.next = l2;

return newhead.next;

}}

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...

分隔鍊錶(鍊錶 LeetCode)

題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...