站点图标 兰玉磊的个人博客

Golang实现反转单链表

预期结果

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

实现原理介绍

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

链表节点中有两个元素:

type Node struct {
	Data int
	Next *Node
}

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

可以看出来

完整代码

package main

import "fmt"

/*
  @Author : lanyulei
  @Desc : 反转单链表
*/

type Node struct {
	Data int
	Next *Node
}

func reversal(head *Node) *Node {
	cur := head
	var pre *Node = nil
	for cur != nil {
		pre, cur, cur.Next = cur, cur.Next, pre
	}
	return pre
}

func main() {
	head := new(Node)
	head.Data = 0

	tail := head
	for i := 1; i < 10; i++ {
		tail.Next = &Node{
			Data: i,
			Next: nil,
		}

		tail = tail.Next
	}

	head = reversal(head)

	for {
		fmt.Println(head.Data)
		if head.Next == nil {
			break
		}
		head = head.Next
	}
}

参考

https://www.cnblogs.com/TimLiuDream/p/9932494.html

退出移动版