package link
//package link
import (
"fmt"
)
type Student struct {
Id int
Name string
}
type Node struct {
Student
Next *Node
}
func (head *Node) Creat() *Node {
head = nil
return head
}
func (p *Node) PrintLink() {
for p != nil {
fmt.Printf("%d, %s\n", p.Id, p.Name)
p = p.Next
}
}
func (new_node *Node) Mynsert(head *Node) *Node {
//用户轮训的当前节点
var current_node, last_node *Node
// 空链表
current_node = head
if head == nil {
head = new_node
fmt.Println("fist: ", head)
new_node.Next = nil
} else {
for {
//当前节点前方插入
if new_node.Id < current_node.Id {
new_node.Next = current_node
if last_node == nil {
//首节点前插入
head = new_node
new_node.Next = current_node
break
}
last_node.Next = new_node
break
} else {
//当前节点后方插入 那就是最后一个节点
//if new_node.Id > current_node.Id {
if current_node.Next == nil {
current_node.Next = new_node
new_node.Next = nil
break
}
last_node = current_node
current_node = current_node.Next
}
}
}
return head
}
func (delNode *Node) Mydelete(head *Node) *Node {
var last_node, current_node *Node
current_node = head
if head == nil {
fmt.Println("链表为空,无法删除")
}
for {
if delNode.Id == current_node.Id {
if last_node == nil {
//只有一个节点
head = current_node.Next
break
}
if current_node.Next == nil {
//最后一个节点
last_node.Next = nil
break
}
last_node.Next = current_node.Next
current_node = current_node.Next
continue
//break
}
if current_node.Next == nil {
//fmt.Print(current_node)
break
}
last_node = current_node
current_node = current_node.Next
}
return head
}
package main
import (
"fmt"
"link1"
)
func main() {
var head *link.Node
stu1 := link.Node{link.Student{101, "李明"}, nil}
stu2 := link.Node{link.Student{104, "张晓"}, nil}
stu3 := link.Node{link.Student{102, "赵琼"}, nil}
stu4 := link.Node{link.Student{105, "王乐"}, nil}
stu11 := link.Node{link.Student{105, "王rr22"}, nil}
stu5 := link.Node{link.Student{100, "周杰伦"}, nil}
stu7 := link.Node{link.Student{99, "王oo"}, nil}
// stu5 := link.Node{link.Student{103, "王yy"}, nil}
stu8 := link.Node{link.Student{112, "yuyu"}, nil}
stu9 := link.Node{link.Student{112, "ttt"}, nil}
stu10 := link.Node{link.Student{44, "hahahhaha"}, nil}
//创建新链表
head = head.Creat()
//插入节点insert1
head = stu1.Mynsert(head)
head = stu2.Mynsert(head)
head = stu3.Mynsert(head)
head = stu4.Mynsert(head)
head = stu5.Mynsert(head)
head = stu7.Mynsert(head)
head = stu8.Mynsert(head)
head = stu9.Mynsert(head)
head = stu10.Mynsert(head)
head = stu11.Mynsert(head)
//输出链表
head.PrintLink()
//删除节点
//head = stu8.Delete(head)
head = stu2.Mydelete(head)
fmt.Println("=============")
head.PrintLink()
//head.PrintLink()
}