[go語(yǔ)言算法] 單鏈表反轉(zhuǎn)

思路:?jiǎn)捂湵矸崔D(zhuǎn)
Head -> Node1 -> Node2 -> Node3 -> Node4
如果將一個(gè)節(jié)點(diǎn)的next指針指向上一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)與下一個(gè)節(jié)點(diǎn)的關(guān)系,引入變量tmp做臨時(shí)存儲(chǔ)。

pre <- cur  tmp->
         pre  tmp 
  
不停做替換直到最后一次將為nil的tmp賦值給cur判斷為至。頭指針注意最后一次指向非空prev,原因最后一次做了不符合條件的替換。
package main

import (
    "fmt"
)

type LNode struct {
    data int;
    next *LNode;
}

func main()  {
    Head := &LNode{}
    create(Head,10)
    node := Head.next;
    for i:=0;i<10 ;i++  {
        fmt.Println(node.data)
        node = node.next
    }

    reverseLinkList(Head)

    node = Head.next;
    for i:=0;i<10 ;i++  {
        fmt.Println(node.data)
        node = node.next
    }
}

func create(node *LNode,num int)  {
    for i:=0; i<num;i++  {
        newNode := LNode{i,nil}
        node.next = &newNode
        node = &newNode
    }
}

//Head       ->    node1   ->   node2   ->   node3
//
//
//Head  nil  <-    node1        node2   ->   node3
//    prev       cur          tmp
//                 |           |
//               prev         cur
//
//
//
//    nil  <-    node1   <-   node2        node3
//
//               prev          cur         tmp
//
//                             prev          cur


func reverseLinkList(Head *LNode)  {
    cur := Head.next
    Head.next = nil;  //可省略,循環(huán)體中會(huì)指向?yàn)閚il的prev
    var prev *LNode
    var tmp *LNode
    for cur!=nil{
        tmp = cur.next
        cur.next=prev
        prev = cur
        cur = tmp
    }
    Head.next = prev;  
}

//遞歸法
func reverseList(head *ListNode) *ListNode {
    if(head.Next == nil){
        return head
    }
    p:= reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil  //避免尾部環(huán) 1->2->3->4->5           5->4->3->2->1->2->1
    return p    //返回尾節(jié)點(diǎn)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 搞懂單鏈表常見(jiàn)面試題 Hello 繼上次的 搞懂基本排序算法,這個(gè)一星期,我總結(jié)了,我所學(xué)習(xí)和思考的單鏈表基礎(chǔ)知識(shí)...
    醒著的碼者閱讀 4,742評(píng)論 1 45
  • public class JavaTest1 { public static void main(String[]...
    樂(lè)百事52淑熙閱讀 385評(píng)論 0 0
  • 原創(chuàng)文章&經(jīng)驗(yàn)總結(jié)&從校招到A廠一路陽(yáng)光一路滄桑 詳情請(qǐng)戳www.codercc.com 1.Concurrent...
    你聽(tīng)___閱讀 6,663評(píng)論 0 5
  • 我叫笛美拉,是西方神域中掌日月星辰行動(dòng)的神。沒(méi)錯(cuò),我就是神,盡情地膜拜我吧!哈哈哈哈哈......不過(guò),我現(xiàn)在正在...
    鬼王的女人閱讀 310評(píng)論 1 1
  • 前言 Hello,現(xiàn)在的工作,必須要學(xué)習(xí)Bluetooth的一些使用,在這里記錄一下 一.藍(lán)牙權(quán)限 不管如何,開(kāi)發(fā)...
    晨海寶閱讀 2,904評(píng)論 1 4

友情鏈接更多精彩內(nèi)容