快慢指標二分鍊錶
通過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 == null
和head.val == val
其他情況:設定當前節點cur
檢測,前置節點pre
輔助刪除
class
solution
pre.next = pre.next.next;
return head;
}}
遞迴
思想:遞迴前半段是找到那個值為val的節點,後半段就是把節點接上
遞迴出口有兩個:
(1)是head == null直接返回所以當head.val == val時,返回head.next即可(2)還有乙個出口是head.val == val,當前的head即為要刪除的節點
固定好雙指標之間的距離
雙指標向後滑動,滑到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小的結點,另乙個鍊錶儲...