Go-基于节点实现单链表附加基础操作

代码片段如下:

/*
 *                    .::::.
 *                  .::::::::.
 *                 :::::::::::
 *             ..:::::::::::'
 *           '::::::::::::'
 *             .::::::::::
 *        '::::::::::::::..
 *             ..::::::::::::.		Utils:单链表
 *           ``::::::::::::::::		Author:崔金朋
 *            ::::``:::::::::'        .:::.
 *           ::::'   ':::::'       .::::::::.
 *         .::::'      ::::     .:::::::'::::.
 *        .:::'       :::::  .:::::::::' ':::::.
 *       .::'        :::::.:::::::::'      ':::::.
 *      .::'         ::::::::::::::'         ``::::.
 *  ...:::           ::::::::::::'              ``::.
 * ```` ':.          ':::::::::'                  ::::..
 *  		           '.:::::'          			':'````..
 */

package main

import "fmt"

// 创建节点结构/类型
type Node struct {
	Value interface{}
	Next  *Node
}

// 创建链表结构
type LinkedList struct {
	Head   *Node
	Length int
}

type LinkedListMethod interface {
	InsertNode(i int, val interface{}) // 新增节点
	DeleteNode(i int)                  // 删除节点
	GetNodeLength() int                // 获取节点长度
	SearchNode(val interface{}) int    // 查询节点位置
	IsNull() bool                      // 判断链表是否为空
	PrintlnList()                      // 打印链表
}

// 创建节点
func CreateNode(val interface{}) *Node {
	return &Node{val, nil}
}

// 创建空链表
func CreateLinkedList() *LinkedList {
	return &LinkedList{CreateNode(nil), 0}
}

func (list *LinkedList) InsertNode(i int, val interface{}) {
	n := CreateNode(val)
	preNode := list.Head
	for count := 0; count <= i; count++ {
		if count == i-1 {
			n.Next = preNode.Next
			preNode.Next = n
			list.Length++
		}

		preNode = preNode.Next
	}
}

func (list *LinkedList) DeleteNode(i int) {
	preNode := list.Head
	for count := 0; count <= i-1; count++ {
		n := preNode.Next
		if count == i-1 {
			preNode.Next = n.Next
			list.Length--
		}

		preNode = preNode.Next
	}
}

func (list *LinkedList) GetNodeLength() int {
	return list.Length
}

func (list *LinkedList) SearchNode(val interface{}) int {
	preNode := list.Head.Next
	for i := 1; i <= list.Length; i++ {
		if preNode.Value == val {
			return i
		}

		preNode = preNode.Next
	}

	return 0
}

func (list *LinkedList) IsNull() bool {
	return list.Head.Next == nil
}

func (list *LinkedList) PrintlnList() {
	preNode := list.Head.Next
	fmt.Println("linkedList show as follow: ...")
	for i := 1; i <= list.Length; i++ {
		if preNode != nil {
			fmt.Printf("%v\n", preNode.Value)
			preNode = preNode.Next
		}
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值