golang 链表逆序反转输出

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45604257/article/details/102470844

链表逆序输出案例代码

//如何实现链表的逆序
package main

import "fmt"

type studentNode struct {
	no   int
	name string
	age  int
	next *studentNode
	pre  *studentNode
}

func reversePrint(head *studentNode) {
	//1.创建一个辅助结点
	temp := head
	//2.判断这是不是一个空链表
	if temp.next == nil { //说明是一个空链表
		return
	}
	//3.让temp指向这个双向链表的最后结点
	for {
		if temp.next == nil {
			break
		}
		temp = temp.next

	} //循环结束则已经指向双向链表的最后结点
//4.遍历这个链表
for{
	fmt.Printf("%d,%s,%d==>",temp.no,temp.name,temp.age)
	temp=temp.pre//依次向前
	if temp.pre==nil{//判断是不是到了链表头
		break
	}
}
}
func insertStudentNode(head *studentNode, newStudentNode *studentNode) {
	//思路:
	//1.先找到该链表的最后这个结点
	//2.创建一个辅助结点
	temp := head
	for {
		if temp.next == nil { //表示找到最后
			break
		}
		temp = temp.next //让temp不断的指向下一个结点
	}
	//3.将newStudentNode加入到链表的最后
	temp.next = newStudentNode
	newStudentNode.pre=temp

}
//正序打印这个双向链表
func originalList(head *studentNode) {
//1.创建一个辅助结点
temp:=head
//2.先判断这个链表是否是空链表
if temp.next==nil{
	fmt.Println("这是一个空链表")
	return
}
//3.遍历这个链表
for{
	fmt.Printf("%d,%s,%d==>",temp.next.no,temp.next.name,temp.next.age)
	temp=temp.next
if temp.next == nil{
	break
}
}

}
//创建一个双向链表
func createlink()*studentNode {
	//1.先创建一个头结点
	head := &studentNode{}
	//2.创建一个新的studentNode
	stuLisa := &studentNode{
		no:   1,
		name: "Lisa",
		age:  24,
	}
	stuBob := &studentNode{
		no:   2,
		name: "Bob",
		age:  25,
	}	
	stuNick := &studentNode{
			no:   3,
			name: "Nick",
			age:  27,
		}
		stuMark := &studentNode{
			no:   4,
			name: "Mark",
			age:  29,
		}
		//3.加入结点
		insertStudentNode(head, stuLisa)
		insertStudentNode(head, stuBob)
		insertStudentNode(head, stuNick)
		insertStudentNode(head, stuMark)
		return head
}
//逆序打印这个双向链表
func main() {
	head :=createlink()
	fmt.Println("正序打印")
	originalList(head)
	fmt.Println()
	fmt.Println("逆序打印")
	reversePrint(head)

}

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45604257/article/details/102470844