利用快慢速算法查找單鏈表中間節點

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)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章