public static void DoubleLinkedListFunctions() { DLinkedList list = new DLinkedList(); list.head = new DLinkedList.Node(2); list.InsertAtFront(0); list.InsertAfterNode(list.head, 1); list.InsertAtEnd(3); //DLinkedList.Node delNode = list.head.getNext().getNext(); //list.DeleteNode(delNode); list.ReverseList(); //O(N) complexity }
public void InsertAfterNode(Node prevNode, int data) { DLinkedList list = this; Node node = new Node(data); //Get Next Node Node nextNode = prevNode.getNext(); //New Node Next and Prev node.setNext(nextNode); node.setPrev(prevNode); //Next Node's prev and Prev Node's next nextNode.setPrev(node); prevNode.setNext(node); }
public void InsertAtFront(int data) { DLinkedList list = this; Node node = new Node(data); //Set New Node's prev to null and Next to head node.setPrev(null); node.setNext(head); //If Head is not null, set head's prev to new node if (list.head != null) { head.setPrev(node); } head = node; }
public void InsertAtEnd(int data) { DLinkedList list = this; Node node = new Node(data); Node current = list.head; while (current != null && current.getNext() != null) { current = current.getNext(); } //Loop will end when it find current.next = null which will be the last node. current.setNext(node); node.setPrev(current); node.setNext(null); }
public void ReverseList() { DLinkedList list = this; Node temp = null, current; current = list.head; while (current != null) { temp = current.getPrev(); current.setPrev(current.getNext()); current.setNext(temp); current = current.getPrev(); } if (temp != null) { head = temp.getPrev(); } }
public void DeleteNode(Node delNode) { DLinkedList list = this; if (list.head == null || delNode == null) { return; } if (list.head == delNode) { list.head = delNode.getNext(); } if (delNode != null) { Node prevNode = delNode.getPrev(); Node nextNode = delNode.getNext(); prevNode.setNext(nextNode); nextNode.setPrev(prevNode); } }