最简单案例
package main
import "fmt"
type NodeList struct {
data int
next *NodeList
}
func ShowNode(node *NodeList) {
for node != nil {
//fmt.Printf("type :%T ,value:%v\n",*node,*node)
//fmt.Printf("data:%v,next:%v--->",node.data,node.next)
fmt.Printf("--->%v\n", node.data)
node = node.next //移动指针
}
}
func InsertHeadData() {
var head = new(NodeList)
head.data = 0
var tail *NodeList
tail = head
for i := 1; i < 10; i++ {
var node = NodeList{data: i}
node.next = tail
tail = &node
}
ShowNode(tail)
}
func InsertTailData() {
var head = new(NodeList)
head.data = 0
var newList *NodeList
newList = head
for i := 1; i < 10; i++ {
var node = NodeList{data: i}
(*newList).next = &node
newList = &node
}
ShowNode(head)
}
func main() {
InsertTailData()
}
单链表-往最后面插入
复制
package main
import "fmt"
type HeroNode struct {
no int
name string
nickname string
next *HeroNode
}
//在单链表之后加入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {
temp := head
for {
if temp.next == nil {
break
}
temp = temp.next
}
temp.next = newHeroNode
}
//显示链表的所有信息
func ListHeroNode(head *HeroNode) {
temp := head
if temp.next == nil {
fmt.Println("空链表")
return
}
for {
fmt.Printf("[%d,%s,%s]==>", temp.next.no, temp.next.name, temp.next.nickname)
temp = temp.next
if temp.next == nil {
break
}
}
}
func main() {
head := &HeroNode{} //头结点不需要初始化
hero1 := &HeroNode{
no: 1,
name: "宋江",
nickname: "及时雨",
}
hero2 := &HeroNode{
no: 2,
name: "卢俊义",
nickname: "玉麒麟",
}
InsertHeroNode(head, hero1)
InsertHeroNode(head, hero2)
ListHeroNode(head)
}

单链表的有序插入
复制
package main
import "fmt"
type HeroNode struct {
no int
name string
nickname string
next *HeroNode
}
//在单链表之后加入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {
temp := head
flag := true
for {
if temp.next == nil {
break
} else if temp.next.no > newHeroNode.no {
break
} else if temp.next.no == newHeroNode.no {
flag = false
break
}
temp = temp.next
}
if !flag {
fmt.Println("对不起,已经存在no=", newHeroNode.no)
return
} else {
newHeroNode.next = temp.next
temp.next = newHeroNode
}
}
//显示链表的所有信息
func ListHeroNode(head *HeroNode) {
temp := head
for {
if temp.next == nil {
return
}
fmt.Printf("[%d,%s,%s]==>", temp.next.no, temp.next.name, temp.next.nickname)
temp = temp.next
if temp.next == nil {
break
}
}
}
func main() {
head := &HeroNode{} //头结点不需要初始化
hero1 := &HeroNode{
no: 1,
name: "宋江",
nickname: "及时雨",
}
hero2 := &HeroNode{
no: 2,
name: "卢俊义",
nickname: "玉麒麟",
}
hero3 := &HeroNode{
no: 3,
name: "林冲",
nickname: "豹子头",
}
InsertHeroNode(head, hero1)
InsertHeroNode(head, hero3)
InsertHeroNode(head, hero2)
ListHeroNode(head)
}
单链表的有序插入(允许序号重复)
复制
package main
import "fmt"
type HeroNode struct {
no int
name string
nickname string
next *HeroNode
}
//在单链表之后加入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) {
temp := head
for {
if temp.next == nil {
break
} else if temp.next.no > newHeroNode.no {
break
}
temp = temp.next
}
newHeroNode.next = temp.next
temp.next = newHeroNode
}
//显示链表的所有信息
func ListHeroNode(head *HeroNode) {
temp := head
for {
if temp.next == nil {
return
}
fmt.Printf("[%d,%s,%s]==>", temp.next.no, temp.next.name, temp.next.nickname)
temp = temp.next
if temp.next == nil {
break
}
}
}
func main() {
head := &HeroNode{} //头结点不需要初始化
hero1 := &HeroNode{
no: 1,
name: "宋江",
nickname: "及时雨",
}
hero2 := &HeroNode{
no: 2,
name: "卢俊义",
nickname: "玉麒麟",
}
hero3 := &HeroNode{
no: 2,
name: "林冲",
nickname: "豹子头",
}
InsertHeroNode(head, hero3)
InsertHeroNode(head, hero2)
InsertHeroNode(head, hero1)
ListHeroNode(head)
}
