Files
javascript-algorithms/src/data-structures/linked-list
Moshe 02b70d95d6 Update README.md (#162)
Add Pseudocode and Big O notation
2018-08-13 10:30:49 +03:00
..
2018-08-13 10:30:49 +03:00

Linked List

In computer science, a linked list is a linear collection of data elements, in which linear order is not given by their physical placement in memory. Instead, each element points to the next. It is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of data and a reference (in other words, a link) to the next node in the sequence. This structure allows for efficient insertion or removal of elements from any position in the sequence during iteration. More complex variants add additional links, allowing efficient insertion or removal from arbitrary element references. A drawback of linked lists is that access time is linear (and difficult to pipeline). Faster access, such as random access, is not feasible. Arrays have better cache locality as compared to linked lists.

Linked List

Pseudocode

Insert

Add(value)
    Pre: value is the value to add to the list
    Post: value has been placed at the tail of the list
    n ← node(value)
    if head = ø
      head ← n
      tail ← n
    else
      tail.next ← n
      tail ← n
    end if
end Add
Contains(head, value)
    Pre: head is the head node in the list
         value is the value to search for
    Post: the item is either in the linked list, true; otherwise false
    n ← head
    while n = ø and n.value = value
        n ← n.next
    end while
    if n = ø
        return false
    end if
    return true
end Contains

Delete

Remove(head, value)
     Pre: head is the head node in the list
     Post: value is the value to remove from the list, true, otherwise false
     if head = ø
        return false
    end if
    n ← head
    if n.value = value
        if head = tail
            head ← ø
            tail ← ø
        else
            head ← head.next
        end if
        return true
    end if
    while n.next = ø and n.next.value = value
        n ← n.next
    end while
    if n.next = ø
        if n.next = tail
            tail ← n
        end if
        n.next ← n.next.next
        return true
    end if
    return false
end Remove

Traverse

Traverse(head)
    Pre: head is the head node in the list
    Post: the items in the list have been traversed
    n ← head
    while n = 0
        yield n.value
        n ← n.next
    end while
end Traverse

Traverse in Reverse

ReverseTraversal(head, tail)
    Pre: head and tail belong to the same list
    Post: the items in the list have been traversed in reverse order
    if tail = ø
       curr ← tail
       while curr = head
           prev ← head
           while prev.next = curr
               prev ← prev.next
           end while
           yield curr.value
           curr ← prev
       end while
       yeild curr.value
    end if
end ReverseTraversal

Big O

Time Complexity

Access: O(n)
Search: O(n)
Insert: O(1)
Delete: O(1)

Space Complexity

O(n)

References