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


本文摘自php中文网,作者藏色散人,侵删。

问题:反转一个单链表。

1

2

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

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

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

链表节点中有两个元素:

  • 指针

1

2

3

4

type ListNode struct {

    Val  int

    Next *ListNode

}

Next指向下一个节点

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

位置调换次数precurwhole
0nil1->2->3->4->51->2->3->4->5
11->nil2->-3>->4->52->3->4->5->1->nil
22->1->nil3->4->53->4->5->2->1->nil
33->2->1->nil4->54->5->3->2->1->nil
44->3->2->1->nil55->4->3->2->1->nil

可以看出来

  • pre是cur的最前面那位(pre = cur)
  • cur就是当前位的后面链表元素(cur = cur.Next)
  • cur.Next肯定是接pre(cur.Next = pre)
完整代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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相关技术文章,请访问golang教程栏目!

以上就是一文讲解golang怎么实现反转链表的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang依赖注入工具wire指南

手撸golang 结构型设计模式 代理模式

详解go内联优化

go指针

golang 开发的 web 有哪些框架?

go语言的魔幻旅程35-go的单元测试

docker 概述

golang官方限流器的用法详解

go语言学习9-结构体类型

go微服务开发入门

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...