Files

70 lines
1.6 KiB
Markdown
Raw Normal View History

2018-10-12 15:37:13 -04:00
---
title: Reverse a Doubly Linked List
---
2018-10-12 15:37:13 -04:00
## Reverse a Doubly Linked List
### 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.
### 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;
2018-10-12 15:37:13 -04:00
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
};
```
2018-10-12 15:37:13 -04:00
### Reference:
- [Wikipedia](https://en.wikipedia.org/wiki/Doubly_linked_list)