劍指offer面試題16 反轉鍊錶

2021-08-07 06:39:47 字數 736 閱讀 1124

解題思路:

1.非遞迴:設定兩個指標,乙個指標p指向當前節點,乙個指標after指向當前節點的下乙個節點,從頭結點開始遍歷鍊錶,交換指標的位置,在交換之前,需要儲存下一次after節點的位置,因此需要乙個臨時變數來儲存。最後將原來頭部的指標的next設為null。

2.遞迴:遞迴的終止條件是當到達原來元鍊錶的尾部時,返回尾指標,也就是新鍊錶的頭結點,將head的後乙個指標的next域置為head,實現反轉操作,並將head的next域置為null。

/**

* 反轉鍊錶

*/public class solution

listnode p = head;

listnode after = head.next;

if (after == null) else

//最後將尾部的next指標設為null

head.next = null;

return p;

} }

//遞迴地實現反轉鍊錶

public listnode reverselist_recursive(listnode head)

listnode newhead = reverselist_recursive(head.next);

head.next.next = head;

head.next = null;

return newhead;

}}

劍指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 反轉鍊錶

題目描述 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。鍊錶節點定義如下 public class listnode 示意圖 分析 為了正確反轉乙個鍊錶,需要調整鍊錶中指標的方向,為了將調整指標這個複雜的過程分析清楚,我們可以借助圖形來分析,如上圖所示,在 a 所示的鍊錶中...