Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 golang算法-链表逆序

golang算法-链表逆序

发布时间:2021-05-28   编辑:www.jquerycn.cn
jquery中文网为您提供golang算法-链表逆序等资源,欢迎您收藏本站,我们将为您提供最新的golang算法-链表逆序资源

前言

链表逆序,表述的场景为:
A->B->C->D 逆序后: D->C>B>A

分析

  • 需要插入数据,Insert方法
  • 需要打印数据,Print方法
  • 插入数据时,需要定位最后一个节点,LastNode方法
  • 最少需要两个偏移量进行迭代,因为,当判定条件成立时,需要将链表的头部,指向空值的父节点。

LastNode()

// 链表的长度,不包过头
type Node struct {
	Next *Node
	Data int
}
type LinkList struct {
	Header *Node
}

func NewLinkList() *LinkList {
	return &LinkList{
		Header: &Node{
			Next: nil,
			Data: 0,
		},
	}
}

// 获取最后的节点
func (l *LinkList) LastNode() *Node {
	if l.Header == nil {
		return nil
	}
	var flag = l.Header
	var next = l.Header.Next
	for next != nil {
		flag = next
		next = next.Next
	}
	return flag
}

// 获取最后的节点, 输出 &{nil, 7}
func TestLastNode(t *testing.T) {
	l := NewLinkList()
	l.Insert(&Node{nil, 5})
	l.Insert(&Node{nil, 6})
	l.Insert(&Node{nil, 7})

	fmt.Println(l.LastNode())
}

Insert(), Print()

func (l *LinkList) Insert(node *Node) {
	lastNode := l.LastNode()
	lastNode.Next = node
}

func (l *LinkList) Print() {
	var rs = make([]int, 0, 10)

	if l.Header == nil {
		fmt.Println(rs)
	}
	var next = l.Header.Next
	for next != nil {
		rs = append(rs, next.Data)
		next = next.Next
	}
	fmt.Println(rs)
}

// 输出 [5, 6, 7]
func TestPrint(t *testing.T) {
	l := NewLinkList()
	l.Insert(&Node{nil, 5})
	l.Insert(&Node{nil, 6})
	l.Insert(&Node{nil, 7})

	l.Print()
}

链表逆序
// 输出 [10, 9 ,8, 7 ,6 , 5]

func TestReverseLinkList(t *testing.T) {
	l := NewLinkList()
	l.Insert(&Node{nil, 5})
	l.Insert(&Node{nil, 6})
	l.Insert(&Node{nil, 7})
	l.Insert(&Node{nil, 8})
	l.Insert(&Node{nil, 9})
	l.Insert(&Node{nil, 10})

	var flag, next *Node
	next = l.Header.Next
	var tmp *Node
	for next!=nil {
		tmp = next.Next
		next.Next = flag

		flag=next
		next = tmp
	}
	l.Header.Next = flag
	l.Print()
}

仓库地址

点我

到此这篇关于“golang算法-链表逆序”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang算法-链表逆序
Go从入门到精通系列视频之go编程语言密码学哈希算法
利用栈来实现单链表的逆序
Golang LicenseServer授权服务器的设计 与 RSA 密钥对的应用
golang runtime 简析
想系统学习GO语言(Golang
视频教程-微服务-Go语言
拓展学习-golang的基础语法和常用开发工具
golang 算法课 给定乱序的0, 1 输出前0 后1
关于Golang的介绍

[关闭]