golang学习篇章

手写双向链表

2023-05-24  本文已影响0人  Best博客
package main

import (
    "encoding/json"
    "fmt"
)

type node struct {
    val  interface{}
    pre  *node
    next *node
}

type list struct {
    size uint32
    head *node
    tail *node
}

func newList() *list {
    return &list{}
}

func (l *list) AddHead(n *node) {
    if l.head == nil {
        l.head = n
        l.tail = n
        l.head.pre = nil
        l.tail.next = nil
    } else {
        tmp := l.head
        l.head = n
        l.head.pre = nil
        l.head.next = tmp
        tmp.pre = l.head
    }
    l.size++
}

func (l *list) AddTail(n *node) {
    if l.tail == nil {
        l.head = n
        l.tail = n
        l.head.pre = nil
        l.tail.next = nil
    } else {
        tmp := l.tail
        l.tail = n
        l.tail.next = nil
        l.tail.pre = tmp
        tmp.next = l.tail
    }
    l.size++
}

func (l *list) string() string {
    aa := []int{}
    var tmp *node
    for {
        if tmp == nil {
            tmp = l.head
        }

        vv := tmp.val
        ss := vv.(int)
        aa = append(aa, ss)
        tmp = tmp.next
        if tmp == nil {
            break
        }

    }
    bytes, _ := json.Marshal(aa)
    return string(bytes)
}

func main() {
    l := newList()

    for i := 10; i < 20; i++ {
        n := &node{
            val: i + 1,
        }
        l.AddHead(n)
    }

    for i := 0; i < 10; i++ {
        n := &node{
            val: i + 1,
        }
        l.AddTail(n)
    }

    fmt.Println(l.string())
}


GOROOT=/usr/local/go #gosetup
GOPATH=/Users/hugh/go #gosetup
/usr/local/go/bin/go build -o /Users/hugh/Library/Caches/JetBrains/GoLand2023.1/tmp/GoLand/___go_build_banban_test banban/test #gosetup
/Users/hugh/Library/Caches/JetBrains/GoLand2023.1/tmp/GoLand/___go_build_banban_test
[20,19,18,17,16,15,14,13,12,11,1,2,3,4,5,6,7,8,9,10]

Process finished with the exit code 0





上一篇 下一篇

猜你喜欢

热点阅读