單鏈表反轉詳解

2021-10-11 04:25:54 字數 1273 閱讀 1130

1.提出問題

現有乙個鍊錶,包含資料:1->2->3,現需要將該鍊錶的資料進行反轉,變為3->2->1。

2.主要方法:

public void reverse() :對整個鍊錶反轉

public node reverse(node curr) :反轉鍊錶中的某個結點curr,並把反轉後的curr結點返回

3.演算法原理:

使用遞迴反轉的方法,即從原鍊錶的第乙個存資料的結點開始,依次遞迴呼叫反轉每乙個結點,直到把最後乙個結點反轉完畢,整個鍊錶就反轉完畢。

//結點類

public

class

linklist

implements

iterable

}public

linklist()

@override

public string tostring()

}return str+

")";

}}

//單鏈表反轉演算法**

public

void

reverse()

reverse

(head.next);}

/** *

* @param curr 當前的遍歷節點

* @return 反轉後當前節點的上乙個節點

*/public node reverse

(node curr)

//當前節點的後繼節點,轉換後將成為當前節點的前驅節點

node pre =

reverse

(curr.next)

; pre.next = curr;

curr.next = null;

return curr;

}

看不懂???那用圖演示一遍**!!!

注:1.圖中第一和第二個矩形中,第一行**與其它**有若干空行,這表示的是該處第一行的**是遞迴的,必須等內層遞迴結束以後才能執行下面的**。

2.第乙個矩形中的curr1其實就是在reverse( )方法中傳進來的head.next,返回curr1也是返回了乙個空,因為此時curr1已經是反轉完畢後的尾結點了

單鏈表反轉

單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...

反轉單鏈表

include stdafx.h include include using namespace std struct listnode typedef listnode plistnode typedef plistnode list list creatlist return head void...

單鏈表反轉

想起很早以前某次面試,面試官很嚴肅的要求我現場手寫單鏈表反轉的 哥虎軀一震,心想 不就需要要個臨時變數來記錄位址嗎,用得著這樣煞有介事?雖然在那之前我的確沒寫過這個程式,哈哈哈 當時我草草寫了十來行 面試官不等我完成,就直接拿過去開始問問題。不知道是不是因為抗壓能力不足,在面試官的不斷 盤問 下,哥...