**InsertBefore(v any, mark list.Element) list.Element
1 2 3 4 5 6
func(l *List) InsertBefore(v any, mark *Element) *Element { if mark.list != l { returnnil } return l.insertValue(v, mark.prev) }
**InsertAfter(v any, mark list.Element) list.Element
1 2 3 4 5 6
func(l *List) InsertAfter(v any, mark *Element) *Element { if mark.list != l { returnnil } return l.insertValue(v, mark) }
和头插尾插一样,插入到当前节点的前面后面就行
*PushBackList(other list.List)
1 2 3 4 5 6 7 8
func(l *List) PushBackList(other *List) { l.lazyInit() for i, e := other.Len(), other.Front(); i > 0; i, e = i-1, e.Next() { // 获取链表长度,和头节点 // 使用循环将这个链表插入到需要插入的链表后面 l.insertValue(e.Value, l.root.prev) } }
*PushFrontList(other list.List)
1 2 3 4 5 6
func(l *List) PushFrontList(other *List) { l.lazyInit() for i, e := other.Len(), other.Back(); i > 0; i, e = i-1, e.Prev() { l.insertValue(e.Value, &l.root) } }
和上面的一样
删除元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
func(l *List) Remove(e *Element) any { // 这个元素都不是当前链表的,就没必要删了 if e.list == l { l.remove(e) } return e.Value }
func(l *List) move(e, at *Element) { // 将传入参数 e 移动到 at 后面 // 也就是 at 的下一个节点变为 e if e == at { // 相等不需要操作 return } // 先将 e 上一个节点和下一个节点相连 e.prev.next = e.next e.next.prev = e.prev
// at 的下一个节点改为 e e.prev = at e.next = at.next e.prev.next = e e.next.prev = e }
*MoveToFront(e list.Element)
1 2 3 4 5 6
func(l *List) MoveToFront(e *Element) { if e.list != l || l.root.next == e { return } l.move(e, &l.root) }
**MoveBefore(e list.Element, mark list.Element)
1 2 3 4 5 6
func(l *List) PushBackList(other *List) { l.lazyInit() for i, e := other.Len(), other.Front(); i > 0; i, e = i-1, e.Next() { l.insertValue(e.Value, l.root.prev) } }