public boolean insertAfter(int data, int k) { // insert data after DNode w/data k if (head == null) { return false; } DNode current = head; while (current.getData() != k) { current = current.getNext(); if (current == null) { return false; // didn't find k } } // insert after current Node DNode insertingNode = new DNode(data); if (current.getNext() == null) { // is current the last Node? current.setNext(insertingNode); insertingNode.setPrev(current); return true; } // not at last node DNode temp = current.getNext(); current.setNext(insertingNode); insertingNode.setPrev(current); insertingNode.setNext(temp); temp.setPrev(insertingNode); // example: // if we are inserting after 2 // 1<->2<->4<->5<->6 // insertingNode = 3 // temp = 4 // in order: 2->3, 2<->3, 2<->3->4, 2<->3<->4, result: //1<->2<->3<->4<->5<->6 return true; }
public boolean delete(int data) { boolean isDeleted = false; if (head.getData() == data) { head.setNext(head); head.setPrev(null); isDeleted = true; return isDeleted; } DNode current = head; // 1 <-> 2 <-> 3 <-> 4 <-> 5 while (current.getNext() != null) { if (current.getNext().getData() == data) { current.setNext(current.getNext().getNext()); current.getNext().setPrev(current); isDeleted = true; } current = current.getNext(); } return isDeleted; }
public void insertAtEnd(int data) { DNode insertingNode = new DNode(data); if (head == null) { head = insertingNode; } else { DNode current = head; while (current.getNext() != null) { current = current.getNext(); } current.setNext(insertingNode); insertingNode.setPrev(current); } }