利用快慢速算法查找单链表中间节点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值