文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php教程>一文讲解golang怎么实现反转链表

一文讲解golang怎么实现反转链表

时间:2021-07-30  来源:互联网

今天PHP爱好者为您带来今天这篇文章给大家讲解golang怎么实现反转链表,首先先认识一下链表这个数据结构,链表节点中有两个元素:值、指针。希望对大家有所帮助。

问题:反转一个单链表。

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

首先先认识一下链表这个数据结构:

链表节点中有两个元素:

  • 指针

type ListNode struct {
   Val  int
   Next *ListNode
}

Next指向下一个节点

那么这道题其实就是把指针指向前一个节点

位置调换次数

pre

cur

whole





0

nil

1->2->3->4->5

1->2->3->4->5

1

1->nil

2->-3>->4->5

2->3->4->5->1->nil

2

2->1->nil

3->4->5

3->4->5->2->1->nil

3

3->2->1->nil

4->5

4->5->3->2->1->nil

4

4->3->2->1->nil

5

5->4->3->2->1->nil

可以看出来

  • pre是cur的最前面那位(pre = cur)

  • cur就是当前位的后面链表元素(cur = cur.Next)

  • cur.Next肯定是接pre(cur.Next = pre)

完整代码:

package main

import "fmt"

//链表节点
type ListNode struct {
   Val  int
   Next *ListNode
}

//反转链表的实现
func reversrList(head *ListNode) *ListNode {
   cur := head
   var pre *ListNode = nil
   for cur != nil {
       pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
   }
   return pre
}

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 := reversrList(head)
   fmt.Println(pre)
}

以上就是一文讲解golang怎么实现反转链表的详细内容,更多请关注php爱好者其它相关文章!

相关阅读更多 +
最近更新
排行榜 更多 +
元梦之星最新版手游

元梦之星最新版手游

棋牌卡牌 下载
我自为道安卓版

我自为道安卓版

角色扮演 下载
一剑斩仙

一剑斩仙

角色扮演 下载