Go-单链表
单链表-往最后面插入
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)
}
转载请注明出处,欢迎讨论和交流!