美文网首页
38.Go语言·数据结构·单向链表

38.Go语言·数据结构·单向链表

作者: 一枼落知天下 | 来源:发表于2019-06-19 19:17 被阅读0次

main.go

// Go语言·数据结构
package main

import (
    "fmt"
)

var content string = `
————————————————Go语言·数据结构————————————————————
一、链表
    是有序的列表,

二、单链表
        头节点:
            用来标识链表的头,本身不存放数据。

`

// 定义一个节点
type HeroNode struct {
    no       int
    name     string
    nickname string
    next     *HeroNode //表示指向下一个节点
}

// 在单链表的最后加入。
func PushSingleLinkNode(headNode *HeroNode,nextNode *HeroNode) {
    // 思路
    // 1.先找到该链表最后的节点。
    // 2.创建一个辅助节点
    temp := headNode
    for {
        // 找到了链表最后的节点
        if temp.next == nil{
            break       
        }
        // 不断的指向下一个节点
        temp = temp.next
    }
    //最后的节点指向下一个节点 
    temp.next = nextNode
}

// 在单链表的最后加入。 有序的
func PushSingleLinkNodeSort(headNode *HeroNode,nextNode *HeroNode) {
    // 思路
    // 1.先找到该链表适当的节点。
    // 2.创建一个辅助节点
    var flag = true
    temp := headNode
    for {
        // 找到了链表最后的节点
        if temp.next == nil{
            break       
        }else if temp.next.no>nextNode.no{
            // 说明nextNode接口,就应该直接插入到temp后面
            break
        }else if temp.next.no==nextNode.no{
            // 链表中已经存在咯,就不允许插入
            flag = false
            break
        }
        // 不断的指向下一个节点
        temp = temp.next
    }
    if !flag {
        fmt.Println("链表中已经存在咯,就不允许插入!")
    }else{
        nextNode.next,temp.next = temp.next, nextNode
    }
}


// 打印链表
func ListSingleLinkNode(head *HeroNode) {
    // 1.先找到该链表最后的节点。
    // 2.创建一个辅助节点
    temp := head
    
    if temp.next == nil{
        fmt.Println("链表空空如也~~~")        
    }

    // 遍历链表
    for {
        fmt.Printf("[%d,%s,%s]===>",
            temp.next.no,temp.next.name,temp.next.nickname)
        // 不断的指向下一个节点
        temp = temp.next
        // 最后一个节点咯。
        if temp.next == nil{
            break   
        }
    }
}


func PopSingleLinkNode(head *HeroNode,id int) {
    var flag = false
    temp := head
    for {
        // 找到了链表最后的节点
        if temp.next == nil{
            break       
        }else if temp.next.no==id{
            flag = true
            break
        }
        // 不断的指向下一个节点
        temp = temp.next
    }
    if flag {
        fmt.Println(temp.name)
        temp.next = temp.next.next
    }else{
        fmt.Println("删除的节点不存在~~")
    }
}


func main() {
    // 1.先创建头节点,空的,默认值
    head := &HeroNode{}

    // 创建一个新的节点
    next := &HeroNode{
        no:1,
        name:"宋江",
        nickname :"及时雨",
    }

    PushSingleLinkNodeSort(head, next)

    next2 := &HeroNode{
        no:4,
        name:"林冲",
        nickname :"豹子头",
    }
    PushSingleLinkNodeSort(head, next2)

    next3 := &HeroNode{
        no:2,
        name:"卢俊义",
        nickname :"玉麒麟",
    }
    PushSingleLinkNodeSort(head, next3)

    next4 := &HeroNode{
        no:3,
        name:"吴用",
        nickname :"智多星",
    }
    PushSingleLinkNodeSort(head, next4)

    ListSingleLinkNode(head)

    fmt.Println()

    PopSingleLinkNode(head, 2)

    ListSingleLinkNode(head)

    fmt.Println()
}



相关文章

  • 38.Go语言·数据结构·单向链表

    main.go

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • 2019-12-04 Java-LinkedList源码解读

    @TOC 1、链表数据结构 链表分为单向链表和双向链表,他们的区别在于,单向链表只能单向寻址,而双向链表可以双向寻...

  • 用Java写单向链表

    数据结构—单向链表 为了巩固自己的基础知识,这次就用 Java 来写一个单向链表。问:什么是单向链表?首先链表是数...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • 线性表-单向循环链表

    单向循环链表 单向循环链表示意图如下: 数据结构定义(同普通链表) 单向循环链表初始化与赋值 在上面循环遍历查找尾...

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 链表反转

    概述 链表反转是非常经典的面试题,要实现此功能,需先实现链表的数据结构。 链表类 获得单向链表方法 输出单向链表方...

  • 总结

    Android篇 数据结构与算法顺序表 - ArrayList源码链表 - 单向链表、双向链表 - LinkedL...

  • 2018-03-26

    数据结构:单向链表 #include#include//实现一个简单的单向链表 (不带头节点的链表,只有一个头指针...

网友评论

      本文标题:38.Go语言·数据结构·单向链表

      本文链接:https://www.haomeiwen.com/subject/clrlqctx.html