1. 程式人生 > >go語言 鏈表練習

go語言 鏈表練習

div 長度 指定 指定節點 Go語言 ast class 位置 return

package main

import "fmt"

//定義節點
type Node struct {
	Data int
	Next *Node
}

/*
* 返回第一個節點
* h 頭結點
 */
func GetFirst(h *Node) *Node {
	if h.Next == nil {
		return nil
	}
	return h.Next
}

/*
* 返回最後一個節點
* h 頭結點
 */
func GetLast(h *Node) *Node {
	if h.Next == nil {
		return nil
	}
	i := h
	for i.Next != nil {
		i = i.Next
		if i.Next == nil {
			return i
		}
	}
	return nil
}

//取長度
func GetLength(h *Node) int {
	var i int = 0
	n := h
	for n.Next != nil {
		i++
		n = n.Next
	}
	return i
}

//插入一個節點
//h: 頭結點
//d:要插入的節點
//p:要插入的位置
func Insert(h, d *Node, p int) bool {
	if h.Next == nil {
		h.Next = d
		return true
	}
	i := 0
	n := h
	for n.Next != nil {
		i++
		if i == p {
			if n.Next.Next == nil {
				n.Next = d
				return true
			} else {
				d.Next = n.Next
				n.Next = d.Next
				return true
			}
		}
		n = n.Next
		if n.Next == nil {
			n.Next = d
			return true
		}
	}
	return false
}

//取出指定節點
func GetLoc(h *Node, p int) *Node {
	if p < 0 || p > GetLength(h) {
		return nil
	}
	var i int = 0
	n := h
	for n.Next != nil {
		i++
		n = n.Next
		if i == p {
			return n
		}
	}
	return nil
}

func main() {
	var h Node
	li := []int{2, 4, 3}
	for _, l := range li {
		var d Node
		d.Data = l
		Insert(&h, &d, l)
	}

	var i Node
	ls := []int{5, 6, 4}
	for _, s := range ls {
		var dd Node
		dd.Data = s
		Insert(&i, &dd, s)
	}

	sum := 0
	sum = GetLoc(&h, 3).Data*100 + GetLoc(&h, 2).Data*10 + GetLoc(&h, 1).Data + GetLoc(&i, 3).Data*100 + GetLoc(&i, 2).Data*10 + GetLoc(&i, 1).Data
	fmt.Println(sum)
}

  

go語言 鏈表練習