From d50b4970dc41b418a9e3efa2e6c6dcbe28e033df Mon Sep 17 00:00:00 2001
From: Nicholas Win <8389946+nicholaswin@users.noreply.github.com>
Date: Wed, 26 Jun 2019 09:10:57 -0700
Subject: [PATCH] Add method, solution, and reference. (#32135)
* Add method, solution, and reference.
* fix: removed stub text
---
.../reverse-a-doubly-linked-list/index.md | 65 ++++++++++++++++++-
1 file changed, 62 insertions(+), 3 deletions(-)
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)