Files
Nicholas Win d50b4970dc Add method, solution, and reference. (#32135)
* Add method, solution, and reference.

* fix: removed stub text
2019-06-26 17:10:57 +01:00

1.6 KiB

title
title
Reverse a Doubly Linked List

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:

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: