golang链表

本文详细探讨了Golang中链表的数据结构和实现,包括单链表、双向链表的基本操作,如插入、删除、遍历等,并通过实例代码解析其工作原理。同时,还讨论了链表在Golang内存管理中的特点及其在特定场景下的应用优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值