劍指offer面試題16 反轉鍊錶

2021-07-04 20:17:59 字數 1020 閱讀 9426

題目描述:

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。鍊錶節點定義如下:

public class listnode

}

示意圖:

分析:

為了正確反轉乙個鍊錶,需要調整鍊錶中指標的方向,為了將調整指標這個複雜的過程分析清楚,我們可以借助圖形來分析,如上圖所示,在(a)所示的鍊錶中,h、i和j是3個相鄰的結點。假設經過若干操作,我們已經把結點h之前的指標調整完畢,這些結點的next都指向前面乙個結點,接下來我們把i的next指向h,此時的鍊錶的結構圖如圖(b)所示。

不難注意到,由於結點i的next指向了它的前乙個結點,導致我們無法在鍊錶中遍歷到結點j。為了避免連邊在結點i處斷開,我們需要在調整結點i的next之前,把節點j儲存起來。

也就是說我們在調整結點i的next指標時,除了需要知道節點i本事之外,還需要i的前乙個結點h,因為我們需要把結點i的next指向節點h,同時,我們還事先需要儲存i的乙個節點j,以防止鍊錶斷開。因此我們需要定義3個指標,分別指向當前遍歷到的結點、它的前乙個結點以及後乙個結點。

注意:

(1)輸入的煉表頭指標為null或者整個鍊錶只有乙個結點時

(2)翻轉後的鍊錶出現斷裂

**:

package offer;

public class reverselist

pnode.next=pprev;

pprev=pnode;

pnode=pnext;

} return preversehead;

}}

劍指offer 面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

劍指Offer面試題16 反轉鍊錶

反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...

劍指Offer 面試題16 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。分析 我們使用乙個棧,首先將鍊錶中的每乙個結點都儲存到棧中,然後將棧中的結點依次取出,重新構造鍊錶,注意,要保持頭結點不變,也就是說要在原來的鍊錶基礎之上重新構造新的反轉鍊錶!源 如下 include list.h includ...