package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
//链表实现队列
func InsertNode(head *ListNode, newNode *ListNode) {
temp := head
for {
if temp.Next == nil { //表示找到最后
break
}
temp = temp.Next //让temp不断指向下一个节点
}
temp.Next = newNode
}
//插入排序
func InsertNodeFromSmall(head *ListNode, newNode *ListNode) {
temp := head
flag := true
for {
//表示找到最后
if temp.Next == nil {
break
} else if temp.Next.Val > newNode.Val {
fmt.Println(temp.Next.Val, newNode.Val)
break
} else if temp.Next.Val == newNode.Val {
//相同值不能插入
flag = false
break
}
temp = temp.Next //让temp不断指向下一个节点
}
if !flag {
fmt.Println("已经存在val", newNode.Val)
return
} else {
newNode.Next = temp.Next
temp.Next = newNode
}
}
//显示所有
func ListNodes(head *ListNode) {
temp := head
//判断链表是否为空
if temp.Next == nil {
fmt.Println("空链表")
return
}
for {
fmt.Printf("[%d]==>", temp.Next.Val)
temp = temp.Next
if temp.Next == nil {
break
}
}
}
func main() {
head := &ListNode{}
node1 := &ListNode{Val: 1}
node2 := &ListNode{Val: 5}
node3 := &ListNode{Val: 2}
node4 := &ListNode{Val: 3}
InsertNodeFromSmall(head, node1) //插入时自动排序
InsertNodeFromSmall(head, node2)
InsertNodeFromSmall(head, node3)
InsertNodeFromSmall(head, node4)
ListNodes(head)
}
golang链表
最新推荐文章于 2024-05-22 15:57:05 发布
本文详细探讨了Golang中链表的数据结构和实现,包括单链表、双向链表的基本操作,如插入、删除、遍历等,并通过实例代码解析其工作原理。同时,还讨论了链表在Golang内存管理中的特点及其在特定场景下的应用优势。
1255

被折叠的 条评论
为什么被折叠?



