package main
import (
"fmt"
)
//环形链表测试用结构体
type TestNode struct {
no int //编号
name string //姓名
next *TestNode
}
//环形链表插入
func InsertNod(head *TestNode, newNode *TestNode) {
if head.next == nil {
head.no = newNode.no
head.name = newNode.name
head.next = head
return
}
temp := head
for {
if temp.next == head {
break
}
temp = temp.next
}
temp.next = newNode
newNode.next = head
}
//删除
func DelNode(head *TestNode, id int ) *TestNode {
temp := head //辅助节点指向链表头节点head
helper := head //辅助节点指向链表最后一个节点
//判断链表为空
if head.next == nil {
fmt.Println("此链表为空!")
return head
}
//判断只有一个节点,且这个节点的no编号等于id时删除
if head.next == head && head.no == id {
head.next = nil
return head
}
//将helper指向链表最后一个节点
for {
if helper.next == head {
break
}
helper = helper.next
}
flag := true
for {
if temp.next == head {
break
}
if temp.no == id {
if temp == head {
head = head.next
}
helper.next = temp.next
flag = false
break
}
temp = temp.next
helper = helper.next
}
if flag {
if temp.no == id {
helper.next = temp.next
} else {
fmt.Printf("无id为%d的值!",id)
}
}
return head
}
//显示链表
func ListNode(head *TestNode) {
temp := head
if temp.next == nil {
return
}
for {
fmt.Printf("%d:%s\t",temp.no,temp.name)
temp = temp.next
if temp == head {
break
}
}
}
func main() {
head := &TestNode{}
t1 := &TestNode {
no : 1,
name : "a",
}
t2 := &TestNode {
no : 2,
name : "b",
}
t3 := &TestNode {
no : 3,
name : "c",
}
InsertNod(head,t1)
InsertNod(head,t2)
InsertNod(head,t3)
// head = DelNode(head,1)
ListNode(head)
}