链表结构体定义
// 链表节点
type LinkNode struct {
value string
next *LinkNode
}
添加节点
// 添加节点
func (ln *LinkNode) AddNode(addNode *LinkNode) error {
tail := ln
for {
if tail.next == nil {
//找到了最后一个节点
break
}
//如果没有找到,把当前节点的next指向临时节点
tail = tail.next
}
tail.next = addNode
return nil
}
删除节点
// 删除节点
func (ln *LinkNode) DelNode(delNode *LinkNode) error {
tail := ln
for {
if delNode == tail {
return fmt.Errorf("头结点不可删除")
}
if tail.next == nil {
return fmt.Errorf("没有找到要删除的节点")
}
if tail.next == delNode {
break
}
tail = tail.next
}
tail.next = delNode.next
return nil
}
遍历链表
// 遍历链表
func (ln *LinkNode) ShowNode() {
tail := ln
for {
if tail == nil {
break
}
fmt.Printf("[%s]->", tail.value)
tail = tail.next
}
fmt.Println()
}
使用案例
package main
import "fmt"
// 链表节点
type LinkNode struct {
value string
next *LinkNode
}
// 添加节点
func (ln *LinkNode) AddNode(addNode *LinkNode) error {
tail := ln
for {
if tail.next == nil {
//找到了最后一个节点
break
}
//如果没有找到,把当前节点的next指向临时节点
tail = tail.next
}
tail.next = addNode
return nil
}
// 删除节点
func (ln *LinkNode) DelNode(delNode *LinkNode) error {
tail := ln
for {
if delNode == tail {
return fmt.Errorf("头结点不可删除")
}
if tail.next == nil {
return fmt.Errorf("没有找到要删除的节点")
}
if tail.next == delNode {
break
}
tail = tail.next
}
tail.next = delNode.next
return nil
}
// 遍历链表
func (ln *LinkNode) ShowNode() {
tail := ln
for {
if tail == nil {
break
}
fmt.Printf("[%s]->", tail.value)
tail = tail.next
}
fmt.Println()
}
func main() {
// 创建链表头结点
head := &LinkNode{value: "head"}
// 添加节点
node1 := &LinkNode{value: "Node1"}
node2 := &LinkNode{value: "Node2"}
head.AddNode(node1)
head.AddNode(node2)
// 显示链表
fmt.Println("Initial Linked List:")
head.ShowNode()
// 删除节点
err := head.DelNode(node1)
if err != nil {
fmt.Println(err)
}
// 显示修改后的链表
fmt.Println("Linked List after deleting Node1:")
head.ShowNode()
}