func (l *LinkedList) filterModify(fn FilterFn) (nl *LinkedList) {
	nl = l
	l.ForEach(nil, func(n *Node, val int64) bool {
		if !fn(val) {
			l.Remove(n)
		}
		return false
	})
	return
}
filterModify will modify and return filtered list
package linkedlist
var (
	zeroVal int64
	zeroSum int64
)
type LinkedList struct {
	head *Node
	tail *Node
	reporter bool
	len      int32
}
func (l *LinkedList) prepend(val int64) (n *Node) {
	n = newNode(nil, l.head, val)
	if l.head != nil {
		l.head.prev = n
	}
	if l.tail == nil {
		l.tail = n
	}
	l.head = n
	l.len++
	return
}
func (l *LinkedList) append(val int64) (n *Node) {
	n = newNode(l.tail, nil, val)
	if l.tail != nil {
		l.tail.next = n
	}
	if l.head == nil {
		l.head = n
	}
	l.tail = n
	l.len++
	return
}
func (l *LinkedList) mapCopy(fn MapFn) (nl *LinkedList) {
	nl = &LinkedList{reporter: true}
	l.ForEach(nil, func(n *Node, val int64) bool {
		nl.append(fn(val))
		return false
	})
	return
}
func (l *LinkedList) mapModify(fn MapFn) (nl *LinkedList) {
	nl = l
	l.ForEach(nil, func(n *Node, val int64) bool {
		n.val = fn(val)
		return false
	})
	return
}
func (l *LinkedList) filterCopy(fn FilterFn) (nl *LinkedList) {
	nl = &LinkedList{reporter: true}
	l.ForEach(nil, func(_ *Node, val int64) bool {
		if fn(val) {
			nl.append(val)
		}
		return false
	})
	return
}