P02 单链表反转(递归)

小咪咪 2022-10-09 02:56 309阅读 0赞

在这里插入图片描述

  1. func RecursionChain(curr *Node) *Node {
  2. // curr若本来是nil直接返回
  3. // curr.next为空则当前节点最最后节点
  4. if curr == nil || curr.Next == nil {
  5. return curr
  6. }
  7. // 会无限调用自己,并返回最后一个last值, 将这个last逐层返回即可
  8. last := RecursionChain(curr.Next)
  9. // 取到最后节点才开始两两调转指向
  10. next := curr.Next // 取next
  11. next.Next = curr // 将next调转
  12. curr.Next = nil // 将curr执行nil,避免双向链表
  13. return last
  14. }

结果输出

&{1 0xc0001021f0}->&{2 0xc000102200}->&{3 0xc000102210}->&{4 }->
&{4 0xc000102200}->&{3 0xc0001021f0}->&{2 0xc0001021e0}->&{1 }->

测试

  1. package main
  2. import "fmt"
  3. type Node struct {
  4. ID int8
  5. Next *Node
  6. }
  7. func ShowListNode(head *Node) {
  8. for curr := head; curr != nil; curr = curr.Next {
  9. fmt.Print(curr, "->")
  10. }
  11. fmt.Println()
  12. }
  13. func BuildListNodeByList(list []int8) *Node {
  14. head := &Node{ }
  15. curr := head
  16. for _, id := range list {
  17. temp := &Node{ ID: id}
  18. curr.Next = temp
  19. curr = temp
  20. }
  21. return head.Next
  22. }
  23. func main() {
  24. head := BuildListNodeByList([]int8{ 1, 2, 3, 4})
  25. ShowListNode(head)
  26. head3 := RecursionChain(head)
  27. ShowListNode(head3)
  28. }

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读