It also is not necessary to make the head and node properties of NodeChain implicitly unwrapped optionals (and does not make much sense for constant properties anyway). Simple non-optional constant properties will do:
let head: Node<Element>
let tail: Node<Element>
var l1 = LinkedList([1, 2, 3])
let l2 = l1
_ = l1.popFirstremoveFirst()
_ = l1.popLastremoveLast()