package main
import (
"fmt"
"log"
"math/rand"
)
// 单链表结点
type Node struct {
data int
pNode *Node
}
//初始化单链表
func initList()*Node {
pHead:=new(Node)
pHead.pNode=nil
return pHead
}
// 生成单链表数据,用于查找中间节点
func createList(phead *Node,size int) {
if size<0 || size>100 {
log.Fatal("参数输入错误")
}
for i:=0;i<size;i++ {
pnew:=new(Node)
pnew.data=rand.Int()%100 //生成随机数
pnew.pNode=phead.pNode
phead.pNode=pnew
}
}
//打印单链表数据
func traverse(phead *Node) {
for p:=phead.pNode;p!=nil;p=p.pNode {
fmt.Printf("%3d",p.data)
}
fmt.Println()
}
//获取中间一个节点
func getMiddle(phead *Node) {
plast:=phead.pNode.pNode
pmiddle:=phead.pNode
for ;plast!=nil;plast=plast.pNode.pNode {
if plast.pNode==nil {
break
}
pmiddle=pmiddle.pNode
fmt.Print(" ")
}
fmt.Printf("%3d",pmiddle.data)
}
func main() {
pHead:=initList()
createList(pHead,21)
traverse(pHead)
getMiddle(pHead)
}
利用快慢速算法查找单链表中间节点
最新推荐文章于 2022-12-03 18:29:19 发布