glang--單鏈表翻轉(zhuǎn)

golang的鏈表結(jié)構(gòu)簡單,如下


type ListNode struct {
    Val  int     //節(jié)點(diǎn)值
    Next *ListNode  //存儲著下一個(gè)節(jié)點(diǎn)的地址网棍,用指針表示
}

不廢話兼蜈,先定義并初始化一個(gè)單鏈表

func main() {
    head := new(ListNode)
    head.Val = 1
    ln2 := new(ListNode)
    ln2.Val = 2
    ln3 := new(ListNode)
    ln3.Val = 3
    ln4 := new(ListNode)
    ln4.Val = 4
    ln5 := new(ListNode)
    ln5.Val = 5
    head.Next = ln2
    ln2.Next = ln3
    ln3.Next = ln4
    ln4.Next = ln5
        pre := reverse(head)
}

然后,開始介紹我所理解的方法

方法一:新建一個(gè)鏈表(只有頭結(jié)點(diǎn))序宦,然后遍歷需要翻轉(zhuǎn)的鏈表睁壁,逐個(gè)插入到新鏈表中即可,最后新鏈表就是原鏈表的翻轉(zhuǎn)鏈表互捌,如圖

image.png

image.png

圖例解釋:
1潘明、dummy是只有頭結(jié)點(diǎn)的新鏈表,或者說dummy就是新鏈表的頭結(jié)點(diǎn)
2秕噪、pCur是要插入到新鏈表的節(jié)點(diǎn)钳降。
3、定義一個(gè)pNex作為一個(gè)中轉(zhuǎn)變量腌巾,臨時(shí)保存的pCur的next遂填,也就是下一個(gè)要插入新鏈表的節(jié)點(diǎn)信息铲觉。
4、將當(dāng)前dummy的指向(dummy指向nil)賦值給當(dāng)前要插入新鏈表中的節(jié)點(diǎn)(原來指向pNex,賦值后也指向nil)
5吓坚、調(diào)整dummy的指向撵幽,讓指針指向當(dāng)前要插入的節(jié)點(diǎn)pCur
經(jīng)過4、5 新鏈表中就形成了一個(gè) dummy->pCur->nil的鏈表
6礁击、需要循環(huán)原鏈表 盐杂,則要保持原鏈表中pCur != nil ,所以客税,要將3中的pNex賦值給pCur繼續(xù)進(jìn)行循環(huán)(即重復(fù)3~6步)况褪,直到pCur沒有值了方可罷休

此時(shí),上代碼

func reverse(head *ListNode) *ListNode {
        //簡稱更耻,頭插法
    newList := new(ListNode)  //步驟1
    pCur := head  //步驟2
    for pCur != nil {
        pNex := pCur.Next  //步驟3
        pCur.Next = newList.Next  //步驟4
        newList.Next = pCur  //步驟5
        pCur = pNex  //步驟6
    }
    return newList.Next  //循環(huán)完畢测垛,返回原鏈表的翻轉(zhuǎn)鏈表
}

方法二 :就地翻轉(zhuǎn)

image.png
image.png

直接上圖解釋

1、dummy是頭結(jié)點(diǎn)秧均,指向首元節(jié)點(diǎn)prev
2食侮、pCur是待翻轉(zhuǎn)的節(jié)點(diǎn)
3、將pCur的指向賦值給prev(這樣做目胡,就可以吧prev到pCur的指向斷開)
4锯七、將dummy的指向賦值給pCur(這樣做,就可以把pCur指向下一個(gè)節(jié)點(diǎn)3的路斷開誉己,并讓pCur重新指向prev)
經(jīng)過3眉尸、4 就可以把prev,pCur進(jìn)行位置翻轉(zhuǎn)
5巨双、此時(shí)噪猾,再把dummy的指針指向pCur,就可以形成了:頭->2->1 ....的鏈表
6筑累、需要循環(huán)原鏈表 袱蜡,則要保持原鏈表中pCur != nil ,所以慢宗,需要pCur = prev.Next (即重復(fù)3~6步)坪蚁,直到pCur沒有值了方可罷休

代碼就不上了,大同小異

最后镜沽,上個(gè)打印的方法敏晤,因?yàn)榇鎯χ苯哟蛴【褪堑刂妨耍枰阎嫡故境鰜聿胖庇^

func printNode(head *ListNode) {
    for head != nil {
        fmt.Println(head.Val)
        head = head.Next
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缅茉,一起剝皮案震驚了整個(gè)濱河市茵典,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宾舅,老刑警劉巖统阿,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筹我,居然都是意外死亡扶平,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蔬蕊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來结澄,“玉大人,你說我怎么就攤上這事岸夯÷橄祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵猜扮,是天一觀的道長勉吻。 經(jīng)常有香客問我,道長旅赢,這世上最難降的妖魔是什么齿桃? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮煮盼,結(jié)果婚禮上短纵,老公的妹妹穿的比我還像新娘。我一直安慰自己僵控,他們只是感情好香到,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著报破,像睡著了一般悠就。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泛烙,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天理卑,我揣著相機(jī)與錄音,去河邊找鬼蔽氨。 笑死藐唠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹉究。 我是一名探鬼主播宇立,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼自赔!你這毒婦竟也來了妈嘹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绍妨,失蹤者是張志新(化名)和其女友劉穎润脸,沒想到半個(gè)月后柬脸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毙驯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年倒堕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆价。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垦巴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铭段,到底是詐尸還是另有隱情骤宣,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布序愚,位于F島的核電站憔披,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏展运。R本人自食惡果不足惜活逆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拗胜。 院中可真熱鬧蔗候,春花似錦、人聲如沸埂软。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勘畔。三九已至所灸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炫七,已是汗流浹背爬立。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留万哪,地道東北人侠驯。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像奕巍,于是被迫代替她去往敵國和親吟策。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353