AcWing 35 反轉鍊錶

2021-10-22 16:20:38 字數 1397 閱讀 8260

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

請同時實現迭代版本和遞迴版本。

輸入:1-

>2-

>3-

>4-

>5-

>

null

輸出:5

->4-

>3-

>2-

>1-

>

null

[1,

2,3,

4,5]

[5,

4,3,

2,1]

方法一:

使用的是迭代法,主要思想就是從前往後遍歷鍊錶,並將當前位置的下乙個指標賦值給前乙個位置的下乙個指標,但是如果不儲存當前位置的下乙個指標就會導致丟失的情況,所以要使用額外的變數來儲存當前位置的下乙個指標。

方法二:

使用的是遞迴的思想,有的人經常說遞迴雖然**很簡潔,但是很難理解,確實是這樣,這裡遞迴,我們只需要考慮遞迴的結果就行,不用考慮遞迴的過程,從前往後遍歷鍊錶,臨界條件就是head為空,或者head->next為空的時候,即retrun,返回的就是最後乙個指標。

原題鏈結

方法一(迭代):

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

head-

>next =

null

;//頭節點指向空

return a;}}

;

注:主要思想就是從前往後的修改節點的next,使其指向前驅節點,但是同時又不能丟掉下乙個節點的指標,所以得用額外的變數來進行儲存,a和b也是不斷向後移動的,結束條件就是下乙個指標為null時。最終還要使頭節點為null。

方法二(遞迴):

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

};

注:主要思想就是遞迴,遞迴返回的值就是最後乙個節點的指標。 head->next->next = head;拿第一次迴圈舉例,就是頭節點的下乙個節點的指標指向頭節點,從而達到指向前乙個節點的效果。遞迴結束的條件就是head為空 或者 只有乙個元素。

AcWing 35 反轉鍊錶

問題描述 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。樣例輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思考題 請同時實現迭代版本和遞迴版本。空間複雜度 o n definition for singly linked list.struct l...

鍊錶 反轉鍊錶

問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...

反轉鍊錶與分組反轉鍊錶

經典的反轉鍊錶,先上 public class listnode public class printlist system.out.println public class reverse public listnode reverse listnode root listnode pre nul...