1. package link_list
    2. import "fmt"
    3. type DoubleLinkNode struct {
    4. Value interface{}
    5. Prev *DoubleLinkNode
    6. Next *DoubleLinkNode
    7. }
    8. type DoubleLinkList struct {
    9. DoubleLinkNode *DoubleLinkNode
    10. Length int
    11. }
    12. func NewDoubleLinkNode() *DoubleLinkNode { return &DoubleLinkNode{Value: 0, Prev: nil, Next: nil} }
    13. func (d *DoubleLinkNode) GetValue() interface{} { return d.Value }
    14. func (d *DoubleLinkNode) GetPrevNode() *DoubleLinkNode { return d.Prev }
    15. func (d *DoubleLinkNode) GetNextNode() *DoubleLinkNode { return d.Next }
    16. func NewDoubleLinkList() *DoubleLinkList {
    17. return &DoubleLinkList{DoubleLinkNode: NewDoubleLinkNode(), Length: 0}
    18. }
    19. // 双链表插入到后面
    20. func (d *DoubleLinkList) InsertAfterNode(node *DoubleLinkNode, value interface{}) bool {
    21. if node == nil {
    22. return false
    23. }
    24. newNode := NewDoubleLinkNode()
    25. newNode.Value = value
    26. newNode.Prev = node
    27. node.Next = newNode
    28. return true
    29. }
    30. // 双链表插入到前面
    31. func (d *DoubleLinkList) InsertBeforeNode(node *DoubleLinkNode, value interface{}) bool {
    32. if node == nil {
    33. return false
    34. }
    35. newNode := NewDoubleLinkNode()
    36. newNode.Value = value
    37. newNode.Prev = node.Prev
    38. newNode.Next = node
    39. node.Prev.Next = newNode
    40. return true
    41. }
    42. func (d *DoubleLinkList) Print() {
    43. if d.DoubleLinkNode.Next == nil {
    44. return
    45. }
    46. cur := d.DoubleLinkNode.Next
    47. format := ""
    48. for nil != cur {
    49. format += fmt.Sprintf("%+v->", cur.Value)
    50. cur = cur.Next
    51. }
    52. fmt.Println(format)
    53. }