206 題目
反轉乙個單鏈表。
示例:輸入:1-
>2-
>3-
>4-
>5-
>null
輸出:5
->4-
>3-
>2-
>1-
>null
解析
這題比較簡單,使用迭代反轉或者遞迴反轉都可以,這裡使用迭代反**
使用pre、cur、next這三個指標分別儲存head結點的前乙個結點,cur儲存head結點、next儲存head結點的下乙個結點。在鍊錶中只有使用三個指標,才能保證不掉鏈。
cur.next = pre;
pre = cur;
cur = next
上面這段**就實現了一次反轉。
只要cur!=null,上面這個段**就一直迴圈下去,**完整實現:
public
static listnode reverselist
(listnode head)
// pre 是反轉之後的頭結點,所以返回pre
return pre;
}
var
reverselist
=function
(head)
return pre;
};
92 題目反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。
說明:1 ≤ m ≤ n ≤ 鍊錶長度。
示例:輸入:1-
>2-
>3-
>4-
>5-
>null, m =
2, n =
4輸出:1-
>4-
>3-
>2-
>5-
>null
解析
此題還是按照上面的思路,m都n之間的節點使用迭代的方法進行反轉,依然是設定三個指標:pre、cur、next來實現反轉。
的就是將兩頭的剩餘節點連線起來,我們可以觀察:要想連線起來必須要儲存第m個節點前乙個節點和第m個節點(反轉鍊錶的尾節點)。使用con、tail指標來表示。
完整**:
public listnode reversebetween
(listnode head,
int m,
int n)
// 初始化每個結點
listnode pre = null;
listnode cur = head;
listnode next = null;
listnode con = null;
listnode tail = null;
// pre與cur推進,直到cur指向第m個結點
while
(m >1)
// con儲存第m個結點的前乙個節點
con = pre;
// con儲存第m個結點
tail = cur;
// 第m個結點到第n個結點進行反轉
while
(n >0)
// 將前m個結點、第n結點後面的節點連線起來
if(con != null)
else
tail.next = cur;
return head;
}
leecode 92 反轉鍊錶 II
反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4 輸出 1 4 3 2 5 null 思路 將單鏈表進行反轉,頭變尾,尾變頭,改變指標。但是這個題,需要進行指標邊界的判定。public class 指定位置反...
Leecode回文鍊錶
貼 class solution string ss s reverse s.begin s.end if ss s return 1 return 0 我自己的思路比較無腦,就是讀出來轉成string反轉比較。然後看到乙個用棧來做的 之前也有想到,但是感覺對於121這種有些麻煩。class sol...
leecode分割鍊錶
給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5 解題思路 該題相當於乙個分類問題,基於給定引數x分大和小。基於示例解...