A Java DoublyLinkedList
class can implement an .addToTail()
instance method for adding new data to the tail of the list. .addToTail()
takes a single data
argument. It uses data
to create a new Node
which it adds to the tail of the list.
public void addToTail(String data) {Node newTail = new Node(data);Node currentTail = this.tail;if (currentTail != null) {currentTail.setNextNode(newTail);newTail.setPreviousNode(currentTail);}this.tail = newTail;if (this.head == null) {this.head = newTail;}}
A Java DoublyLinkedList
class can implement an .addToHead()
instance method for adding new data to the head of the list. .addToHead()
takes a single data
argument. It uses data
to create a new Node
which it adds to the head of the list.
public void addToHead(String data) {Node newHead = new Node(data);Node currentHead = this.head;if (currentHead != null) {currentHead.setPreviousNode(newHead);newHead.setNextNode(currentHead);}this.head = newHead;if (this.tail == null) {this.tail = newHead;}}
A Java DoublyLinkedList
class can implement a .removeTail()
instance method for removing the tail of the list. .removeTail()
takes no arguments. It removes and returns the tail of the list’s data
, and sets the tail’s previous node as the new tail.
public String removeTail() {Node removedTail = this.tail;if (removedTail == null) {return null;}this.tail = removedTail.getPreviousNode();if (this.tail != null) {this.tail.setNextNode(null);}if (removedTail == this.head) {this.removeHead();}return removedTail.data;}
A Java DoublyLinkedList
class can implement a .removeHead()
instance method for removing the head of the list. .removeHead()
takes no arguments. It removes and returns the head of the list’s data
, and sets the head’s next node as the new head.
public String removeHead() {Node removedHead = this.head;if (removedHead == null) {return null;}this.head = removedHead.getNextNode();if (this.head != null) {this.head.setPreviousNode(null);}if (removedHead == this.tail) {this.removeTail();}return removedHead.data;}
A Java DoublyLinkedList
class has two Node
instance variables:
head
tail
The constructor takes no parameters and sets both instance variables to null
.
public Node head;public Node tail;public DoublyLinkedList() {this.head = null;this.tail = null;}
A DoublyLinkedList
class in Java has the following attributes:
head
and tail
instance Node
variablesnull
.addToHead()
method to add new nodes to the head .addToTail()
method to add new nodes to the tail .removeHead()
method to remove the head node .removeTail()
method to remove the tail node .removeByData()
method to remove a node that matches the data
passed inpublic class DoublyLinkedList {public Node head;public Node tail;public DoublyLinkedList() {this.head = null;this.tail = null;}public void addToHead(String data) {Node newHead = new Node(data);Node currentHead = this.head;if (currentHead != null) {currentHead.setPreviousNode(newHead);newHead.setNextNode(currentHead);}this.head = newHead;if (this.tail == null) {this.tail = newHead;}}public void addToTail(String data) {Node newTail = new Node(data);Node currentTail = this.tail;if (currentTail != null) {currentTail.setNextNode(newTail);newTail.setPreviousNode(currentTail);}this.tail = newTail;if (this.head == null) {this.head = newTail;}}public String removeHead() {Node removedHead = this.head;if (removedHead == null) {return null;}this.head = removedHead.getNextNode();if (this.head != null) {this.head.setPreviousNode(null);}if (removedHead == this.tail) {this.removeTail();}return removedHead.data;}public String removeTail() {Node removedTail = this.tail;if (removedTail == null) {return null;}this.tail = removedTail.getPreviousNode();if (this.tail != null) {this.tail.setNextNode(null);}if (removedTail == this.head) {this.removeHead();}return removedTail.data;}public Node removeByData(String data) {Node nodeToRemove = null;Node currentNode = this.head;while (currentNode != null) {if (currentNode.data == data) {nodeToRemove = currentNode;break;}currentNode = currentNode.getNextNode();}if (nodeToRemove == null) {return null;}if (nodeToRemove == this.head) {this.removeHead();} else if (nodeToRemove == this.tail) {this.removeTail();} else {Node nextNode = nodeToRemove.getNextNode();Node previousNode = nodeToRemove.getPreviousNode();nextNode.setPreviousNode(previousNode);previousNode.setNextNode(nextNode);}return nodeToRemove;}}
A Java DoublyLinkedList
class can implement a .removeByData()
instance method that takes data
as an argument and returns the node that matches data
, or null
if no match exists. If the node exists, .removeByData()
removes it from the list and correctly resets the pointers of its surrounding nodes.
public Node removeByData(String data) {Node nodeToRemove = null;Node currentNode = this.head;while (currentNode != null) {if (currentNode.data == data) {nodeToRemove = currentNode;break;}currentNode = currentNode.getNextNode();}if (nodeToRemove == null) {return null;}if (nodeToRemove == this.head) {this.removeHead();} else if (nodeToRemove == this.tail) {this.removeTail();} else {Node nextNode = nodeToRemove.getNextNode();Node previousNode = nodeToRemove.getPreviousNode();nextNode.setPreviousNode(previousNode);previousNode.setNextNode(nextNode);}return nodeToRemove;}
Doubly linked lists in Java utilize an updated Node
class that has a pointer to the previous node. This comes with additional setter and getter methods for accessing the previous node.
public class Node {public String data;private Node next;private Node previous;public Node(String data) {this.data = data;this.next = null;}public void setNextNode(Node node) {this.next = node;}public void setPreviousNode(Node node) {this.previous = node;}public Node getNextNode() {return this.next;}public Node getPreviousNode() {return this.previous;}}