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)
}
利用快慢速算法查找單鏈表中間節點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.