# REQUIRE `index >= 0 and index <= length`
fun []=(index: Int, item: E) is abstract
+ # Insert an element at a given position, following elements are shifted.
+ #
+ # var a = [10, 20, 30, 40]
+ # a.insert(100, 2)
+ # assert a == [10, 20, 100, 30, 40]
+ #
+ # REQUIRE `index >= 0 and index < length`
+ # ENSURE `self[index] == item`
+ fun insert(item: E, index: Int) is abstract
+
# Remove the item at `index` and shift all following elements
#
# var a = [10,20,30]
self[0] = item
end
- # Insert an element at a given position, following elements are shifted.
- #
- # var a= [10, 20, 30, 40]
- # a.insert(100, 2)
- # assert a == [10, 20, 100, 30, 40]
- fun insert(item: E, pos: Int)
+ redef fun insert(item: E, pos: Int)
do
enlarge(length + 1)
copy_to(pos, length-pos, self, pos + 1)
_head = node
end
+ # O(n)
+ redef fun insert(e, i)
+ do
+ var node = get_node(i)
+ if node == null then
+ push(e)
+ return
+ end
+ var nnode = new ListNode[E](e)
+ var next = node.next
+ if next == null then
+ _tail = nnode
+ else
+ next.prev = nnode
+ end
+ nnode.prev = node
+ nnode.next = next
+ node.next = nnode
+ end
+
# Append `l` to `self` but clear `l`.
##
# O(1)