         index.prev = Unowned(node)
     }
 
+    /// Remove and return the element at `index`.
+    ///
+    /// If this is the *first* modification to the list since creation or copying, invalidates all indices with respect to `self`.
+    ///
+    /// - Complexity: O(1).
     public mutating func removeAtIndex(index: Index) -> Element {
         let index = needsUnique ? uniqueTransferringIndex(index) : index
         let prev = index.prev, next = index.next

        return startIndex.advancedBy(offset)
    }

    public var startIndex: Index {
        return head ?? endIndex
    }

    public var endIndex = Index(value: nil)

    /// - Complexity: O(1).
    public subscript(index: Index) -> Element {
        get {

        return index.value
    }

    /// Add `newElement` to the end of the list.
    ///
    /// If this is the *first* modification to the list since creation or copying, invalidates all indices with respect to `self`.
    ///
    /// - Complexity: O(1).
    public mutating func append(newElement: Element) {
        insert(newElement, atIndex: endIndex)
    }

    /// Remove and return the last element in the list.
    ///
    /// If this is the *first* modification to the list since creation or copying, invalidates all indices with respect to `self`.
    ///
    /// - Complexity: O(1).
    public mutating func removeLast() -> Element {
        return removeAtIndex(endIndex.predecessor())
    }
