链表简单实现(增删查改)

链表

关于链表的原理已经有一篇链表文章写的很详细了,这篇文章主要侧重于代码的实现,主要使用go实现。

单链表实现

package List

type listNode struct {
   
	val  int
	next *listNode
}

func newNode(val int) *listNode {
   

	node := new(listNode)
	node.val = val
	node.next = nil
	return node
}

// NewList 初始化一个不带头结点的链表
func NewList(vals []int) *listNode {
   

	var fistNode *listNode
	var curNode *listNode
	for _, v := range vals {
   
		node := newNode(v)
		if curNode == nil {
   
			fistNode = node
			curNode = fistNode
			continue
		}

		curNode.next = node
		curNode = curNode.next
	}

	return fistNode
}

// FistAdd 头插
func FistAdd(fistNode *listNode, val int) *listNode{
   

	if fistNode == nil {
   
		return fistNode
	}
	node := newNode(val)
	node.next = fistNode
	return node
}

// LastAdd 尾插
func LastAdd(fistNode *listNode, val int)  {
   

	if fistNode == nil {
   
		return
	}

	curNode := fistNode
	for curNode.next != nil {
   
		curNode = curNode.next
	}

	node := newNode(val)
	curNode.next = node

	return
}

// IndexValAdd 在第一个指定值后插入,若没有,在链表尾部插入
// fistNode 链表第一个节点, indexVal 目标节点值, val 新节点值
func IndexValAdd(fistNode *listNode, indexVal, val int) {
   

	if fistNode == nil {
   
		return
	}

	curNode := fistNode
	for curNode.next != nil && curNode.val != indexVal {
   
		curNode = curNode.next
	}

	node := newNode(val)
	nextNode := curNode.next
	node.next = nextNode
	curNode.next = node

	return
}

// ChangVal 更改目标节点值,若没有,不做改动
// fistNode 链表第一个节点, indexVal 目标节点值, val 目标值
func ChangVal (fistNode *listNode,  indexVal, tarVal int)  {
   

	if fistNode == nil {
   
		return
	}

	curNode := fistNode
	for curNode != nil && curNode.val != indexVal {
   
		curNode = curNode.next
	}

	// 判断是走到最后都没有找到对应值还是找到对应值
	if curNode == nil<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值