go语言 单向链表

//示例45
package main

import "fmt"

func main() {
  var intlink Link
  for i := 0; i < 10; i++ {
    intlink.InsertTail(i)
  }
  intlink.Trans()
}

//节点
type LinkNode struct {
  data interface{} //内容
  next *LinkNode //next指针
}

//链表
type Link struct {
  head *LinkNode //头节点
  tail *LinkNode //尾节点
}

//头插法
func (p *Link) InsertHead(data interface{}) {
//获取一个节点
  node := &LinkNode{
    data: data,
    next: nil,
  }
  //判断是否第一个节点,如果是头节点和尾节点都是自己
  if p.tail == nil && p.head == nil {
    p.tail = node
    p.head = node
    return
  }
  //如果不是第一个节点 新节点的next是链表的头节点
  node.next = p.head
  //链表头节点指向新节点
  p.head = node

}

//尾插法
func (p *Link) InsertTail(data interface{}) {
  node := &LinkNode{
  data: data,
  next: nil,
}

  //判断是否第一个节点,如果是头指针和尾指针都是自己
  if p.tail == nil && p.head == nil {
    p.tail = node
    p.head = node
    return
  }

  //链表的尾节点的next指针指向新节点
  p.tail.next = node
  //链表的尾节点指向新节点
  p.tail = node

}

//遍历
func (p *Link) Trans() {
q := p.head
for q != nil {
fmt.Println(q.data)
q = q.next //移动指针
}
}
posted @ 2022-08-20 13:16  5656923  阅读(25)  评论(0)    收藏  举报