反轉鍊錶(Leecode 206 92)

2021-10-02 04:15:10 字數 1735 閱讀 7459

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分大和小。基於示例解...