数据结构之链表go言语实现

本文介绍了一个使用Go语言实现的单链表数据结构,并提供了创建、遍历、判断空链表、获取链表长度、排序、插入及删除节点等功能的具体实现方法。

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

package main

import (
	"fmt"
	"os"
)

type Node struct {
	val int
	pNode *Node
}

func create_list() (*Node) {
	var (
		len int
		val int
	)
	var pHead *Node
	pTmp:=new(Node)
	pTmp.pNode=nil
	pHead=pTmp
	if pHead==nil {
		fmt.Println("分配内存出错,程序退出")
		os.Exit(-1)
	}
	fmt.Println("请输入要生成链表节点个数:len=")
	fmt.Scanf("%d",&len)
	for i:=0;i<len;i++ {
		fmt.Printf("请输入第%d个节点的值:",i+1)
		fmt.Scanf("%d",&val)
		pNew:=new(Node)
		if pNew==nil {
			fmt.Println("分配内存失败,程序退出")
			os.Exit(-1)
		}
		pNew.val=val
		pNew.pNode=nil
		pTmp.pNode=pNew
		pTmp=pNew
	}
	return pHead
}

func traverse_list(pHead *Node) {
	p:=pHead.pNode
	if p==nil {
		return
	}
	for {
		fmt.Printf("%d ",p.val)
		p=p.pNode
		if p==nil{
			break
		}
	}
	fmt.Println()
}

func isempty_list(pHead *Node) bool {
	if pHead.pNode==nil {
		return true
	}
	return false
}

func length_list(pHead *Node) int {
	var len int=0
	p:=pHead.pNode
	for p!=nil {
		len++
		p=p.pNode
	}
	return len
}

func sort_list(pHead *Node) {
	len:=length_list(pHead)
	pLeft:=pHead.pNode
	for i:=0;i<len-1;i++{
		pRight:=pLeft.pNode
		for j:=i+1;j<len;j++{
			if pLeft.val>pRight.val {
				tmp:=pLeft.val
				pLeft.val=pRight.val
				pRight.val=tmp
			}
			pRight=pRight.pNode
		}
		pLeft=pLeft.pNode
	}
}

func insert_list(pHead *Node,pos,val int) bool {
	p:=pHead
	var i int=0
	for  ;i<pos-1;i++{
		p=p.pNode
		if p==nil {
			break
		}
	}
	if i>pos-1 || p==nil {
		return false
	}
	pNew:=new(Node)
	pNew.val=val
	if pNew==nil {
		fmt.Println("分配内存出错,程序退出")
		os.Exit(-1)
	}
	ptmp:=p.pNode
	p.pNode=pNew
	pNew.pNode=ptmp
	return true
}

func delete_list(pHead *Node,pos int)(bool,int) {
	p:=pHead
	var i int=0
	for  ;i<pos-1;i++{
		p=p.pNode
		if p.pNode==nil {
			break
		}
	}
	if i>pos-1 || p.pNode==nil {
		return false,0
	}
	reVal:=p.pNode.val
	p.pNode=p.pNode.pNode
	return true,reVal
}
func main() {
	pHead:=create_list()
	traverse_list(pHead)
	//if isempty_list(pHead) {
	//	fmt.Println("链表为空!")
	//}else {
	//	fmt.Println("链表不为空!")
	//}
	//fmt.Println("链表长度为:",length_list(pHead))
        //sort_list(pHead)
	//insert_list(pHead,4,33)
	pos:=4
	rebool,reval:=delete_list(pHead,pos)
	if rebool {
		fmt.Printf("删除第%d个节点成功,删除的节点值为:%d\n",pos,reval)
	}else {
		fmt.Printf("删除节点失败")
	}
	traverse_list(pHead)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值