数组与链表

2020-09-14  本文已影响0人  hewolf

数组

链表

单链表的实现

//单链表实现
type SKNode struct {
    Next *SKNode
    Data interface{}
}

func NewSKNode(data interface{}) *SKNode {
    return &SKNode{Data: data}
}

type SKList struct {
    Head *SKNode
    Tail *SKNode
}

func (s *SKList) AppendToTail(d interface{}) {
    end := NewSKNode(d)
    if s.Head == nil {
        s.Head = end
    }
    s.Tail.Next = end
    s.Tail = end
}
func (s *SKList) Delete(d interface{}) {
    h := s.Head
    if h.Data == d {
        s.Head = nil
        s.Tail = nil
        return
    }
    for h.Next != nil {
        if h.Next.Data == d {
            if h.Next == s.Tail {
                s.Tail = h
            }
            h.Next = h.Next.Next
            return
        }
        h = h.Next
    }
}

双链表的实现

type DKNode struct {
    Pre  *DKNode
    Next *DKNode
    Data interface{}
}

func NewDKNode(data interface{}) *DKNode {
    return &DKNode{Data: data}
}

type DKList struct {
    Head *DKNode
    Tail *DKNode
}

func (s *DKList) AppendToTail(d interface{}) {
    n := NewDKNode(d)
    if s.Head == nil {
        s.Head = n
        s.Tail = n
        n.Pre = s.Head
        return
    }
    s.Tail.Next = n
    n.Pre = s.Tail
    s.Tail = s.Tail.Next
}

func (s *DKList) AppendToHead(d interface{}) {
    n := NewDKNode(d)
    if s.Head == nil {
        s.Head = n
        s.Tail = n
        n.Pre = s.Head
        return
    }
    s.Head.Pre = n
    n.Next = s.Head
    s.Head = s.Head.Pre
}

func (s *DKList) Delete(d interface{}) {
    h := s.Head
    if h.Data == d {
        s.Head = nil
        s.Tail = nil
        return
    }
    for h.Next != nil {
        if h.Next.Data == d {
            if h.Next == s.Tail {
                s.Tail = h
            }
            if h.Next.Next != nil {
                h.Next.Next.Pre = h
            }
            h.Next = h.Next.Next
            return
        }
        h = h.Next
    }
}
上一篇 下一篇

猜你喜欢

热点阅读