166、 单向链表中间节点

package main

import (
	"fmt"
)

type link struct {
	add   string
	value int
	next  string
}

func getNext(list []*link, next string) *link {
	for _, linkItem := range list {
		if linkItem.add == next {
			return linkItem
		}
	}
	return nil
}

func main() {
	var hand string
	var linkLen int
	fmt.Scan(&hand, &linkLen)

	links := make([]*link, linkLen)
	for i := 0; i < linkLen; i++ {
		var addItem, nextItem string
		var valueItem int
		fmt.Scan(&addItem, &valueItem, &nextItem)
		links[i] = &link{
			add:   addItem,
			value: valueItem,
			next:  nextItem,
		}
	}

	myLinks := make([]*link, 0)
	tempHand := hand
	for {

		nextLink := getNext(links, tempHand)
		if nextLink == nil {
			break
		}
		tempHand = nextLink.next
		myLinks = append(myLinks, nextLink)
	}

	myLinkLen := len(myLinks)
	index := -1
	if myLinkLen%2 != 0 {
		index = (myLinkLen - 1) / 2
	} else {
		index = (myLinkLen) / 2
	}

	for i, linkItem := range myLinks {
		if index == i {
			fmt.Println(linkItem.value)
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值