• golang go语言 实现链表


    package main
    
    import (
    	"errors"
    	"fmt"
    	"strconv"
    )
    
    type List struct {
    	Length int
    	Head  *Node
    }
    
    type Node struct {
    	NextNode *Node
    	Value int
    }
    
    func (list *List) IsEmpty() bool {
    	return list.Length == 0
    }
    
    func (list *List) Append(value int) {
    	list.Length += 1
    	if list.Head == nil {
    		list.Head = &Node{Value: value}
    		return
    	}
    	lastNode := list.Head
    	for lastNode.NextNode != nil {
    		lastNode = lastNode.NextNode
    	}
    	lastNode.NextNode = &Node{Value: value}
    }
    
    func (list *List) Delete(index int) error {
    	if index + 1 > list.Length {
    		return errors.New("index out of range")
    	}
    	list.Length -= 1
    	if index == 0{
    		list.Head = list.Head.NextNode
    		return nil
    	}
    	indexNode := list.Head
    	for i := index; i > 1; i-- {
    		indexNode = indexNode.NextNode
    	}
    	if indexNode.NextNode != nil {
    		indexNode.NextNode = indexNode.NextNode.NextNode
    	} else {
    		indexNode.NextNode = nil
    	}
    	return nil
    }
    
    func (list *List) String() string {
    	var ret string
    	node := list.Head
    	for node.NextNode != nil {
    		ret += strconv.Itoa(node.Value) + ","
    		node = node.NextNode
    	}
    	ret += strconv.Itoa(node.Value)
    	return ret
    }
    
    func (list *List) Insert(index, value int) error {
    	if index + 1 > list.Length {
    		return errors.New("index out of range")
    	}
    	list.Length++
    	if index == 0{
    		list.Head = &Node{Value:value, NextNode:list.Head}
    		return nil
    	}
    	indexNode := list.Head
    	for i := index; i > 1; i-- {
    		indexNode = indexNode.NextNode
    	}
    	tempNode := &Node{Value: value, NextNode: indexNode.NextNode}
    	indexNode.NextNode = tempNode
    	return nil
    }
    
    
    func main() {
    	a := List{}
    	for i := 0; i < 10; i++ {
    		a.Append(i)
    	}
    	fmt.Println(a.String())
    	if err := a.Insert(9, 99); err != nil{
    		fmt.Println(err)
    	}
    	fmt.Println(a.String())
    }
    

      

  • 相关阅读:
    技术分享的一些好的建议
    项目经理排期的几个tip
    公司的目标和你的目标的关系
    Android实现双击事件的两种方式
    互联网公司团队建设的几个要点
    一对一还是一对多? MVP设计前提
    互联网产品研发的典型流程
    架构和模式的区别:三层架构和MVC在应用开发中的位置
    Android Studio插件:PlantUML
    Android Studio插件:GsonFromat
  • 原文地址:https://www.cnblogs.com/shenwenlong/p/11721535.html
Copyright © 2020-2023  润新知