mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2025-07-06 17:44:08 +08:00
@ -19,6 +19,82 @@ potentially more efficient (for nodes other than first nodes) because there
|
|||||||
is no need to keep track of the previous node during traversal or no need
|
is no need to keep track of the previous node during traversal or no need
|
||||||
to traverse the list to find the previous node, so that its link can be modified.
|
to traverse the list to find the previous node, so that its link can be modified.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
n.previous ← tail
|
||||||
|
tail.next ← n1
|
||||||
|
tail ← n
|
||||||
|
end if
|
||||||
|
end Add
|
||||||
|
|
||||||
|
### Delete
|
||||||
|
Remove(head, value)
|
||||||
|
Pre: head is the head node in the list
|
||||||
|
value is the value to remove from the list
|
||||||
|
Post: value is removed from the list, true; otherwise false
|
||||||
|
if head = ø
|
||||||
|
return false
|
||||||
|
end if
|
||||||
|
if value = head.value
|
||||||
|
if head = tail
|
||||||
|
head ← ø
|
||||||
|
tail ← ø
|
||||||
|
else
|
||||||
|
head ← head.Next
|
||||||
|
head.previous ← ∅
|
||||||
|
end if
|
||||||
|
return true
|
||||||
|
end if
|
||||||
|
n ← head.next
|
||||||
|
while n = ø and value = n.value
|
||||||
|
n ← n.next
|
||||||
|
end while
|
||||||
|
if n = tail
|
||||||
|
tail ← tail.previous
|
||||||
|
tail.next ← ø
|
||||||
|
return true
|
||||||
|
else if n = ø
|
||||||
|
n.previous.next ← n.next
|
||||||
|
n.next.previous ← n.previous
|
||||||
|
return true
|
||||||
|
end if
|
||||||
|
return false
|
||||||
|
end Remove
|
||||||
|
|
||||||
|
### Reverse Traversal
|
||||||
|
ReverseTraversal(tail)
|
||||||
|
Pre: tail is the node of the list to traverse
|
||||||
|
Post: the list has been traversed in reverse order
|
||||||
|
n ← tail
|
||||||
|
while n = ø
|
||||||
|
yield n.value
|
||||||
|
n ← n.previous
|
||||||
|
end while
|
||||||
|
end Reverse Traversal
|
||||||
|
|
||||||
|
## Big O
|
||||||
|
|
||||||
|
## Time Complexity
|
||||||
|
|
||||||
|
Access: O(n)
|
||||||
|
Search: O(n)
|
||||||
|
Insert: O(1)
|
||||||
|
Delete: O(1)
|
||||||
|
|
||||||
|
### Space Complexity
|
||||||
|
|
||||||
|
O(n)
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list)
|
- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list)
|
||||||
|
Reference in New Issue
Block a user