diff --git a/guide/english/certifications/coding-interview-prep/data-structures/reverse-a-doubly-linked-list/index.md b/guide/english/certifications/coding-interview-prep/data-structures/reverse-a-doubly-linked-list/index.md index 338ca1e7f6..3804e5a8e4 100644 --- a/guide/english/certifications/coding-interview-prep/data-structures/reverse-a-doubly-linked-list/index.md +++ b/guide/english/certifications/coding-interview-prep/data-structures/reverse-a-doubly-linked-list/index.md @@ -1,10 +1,69 @@ --- title: Reverse a Doubly Linked List --- + ## Reverse a Doubly Linked List -This is a stub. Help our community expand it. +### Method: +- Reverse the doubly linked list, and update previous and next variables for each member node accordingly. +- Define privileged methods add() and reverse(). +- add() will find the end of the list and append new entries at this location. +- reverse() will swap entries one pair at a time using a temporary variable. -This quick style guide will help ensure your pull request gets accepted. +### Solution: - +```js +var Node = function(data, prev) { + this.data = data; + this.prev = prev; + this.next = null; +}; +var DoublyLinkedList = function() { + this.head = null; + this.tail = null; + // change code below this line + this.add = function(element) { + let node = new Node(element, this.tail); + let currentNode = this.head; + let previousNode; + + if (this.head === null) { + this.head = node; + this.tail = node; + } else { + while (currentNode.next) { + previousNode = currentNode; + currentNode = currentNode.next; + } + node.prev = currentNode; + currentNode.next = node; + this.tail = node; + } + }; + this.reverse = function() { + let temp = null; + let currentNode = this.head; + + if (this.head === null) { + return null; + } + + this.tail = currentNode; + + while (currentNode) { + temp = currentNode.prev; + currentNode.prev = currentNode.next; + currentNode.next = temp; + currentNode = currentNode.prev; + } + + if (temp != null) { + this.head = temp.prev; + } + }; + // change code above this line +}; +``` + +### Reference: +- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list)