定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。
請同時實現迭代版本和遞迴版本。
輸入: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...