Learn-dsa..in 30 days!



























CC-13 : Delete adjacent nodes.

Description:

Given a DoubleLinkedList with integer data, and an integer toDelete, identify the node with data toDelete in the DoublelInkedList and delete the identified node and its adjacent nodes.

Test cases and expected outputs:

Input Parameters Expected outputs
6->33->9->3->2->4->5
toDelete 3
6->33->4->5
99->66->44->6->33->4->5
toDelete 99
44->6->33->4->5
30->70->44->6->33->4->5
toDelete 5
30->70->44->6->33
24->27->30->70->44->6->33
toDelete 6
24->27->30->70

Pseudocode:

Iterate through the input DoubleLinkedList till you identify the node currentNode with data toDelete.
Set variable prevNode to node before currentNode.
Set variable prevToPrevNode to node before prevNode.
Set variable nextNode to node after currentNode.
Set variable nextToNextNode to node after nextNode.
Use above variables to delete nodes currentNode,prevNode and nextNodesand then set up linkages between prevToPrevNode and nextToNextNode.

Code:

public void doubleLinkedListDeleteNumAndAdjacent(DoubleLinkedList doubleLinkedList, int toDelete) {
	try {
		DoubleLinkedListNode currentNode=doubleLinkedList.getFirstNode();
		while ((currentNode !=null) && (currentNode.getNodeData() != toDelete)) {
		  	currentNode=currentNode.getNextNode();
		 }
		if (currentNode==null) {return;}
		DoubleLinkedListNode prevNode=null; DoubleLinkedListNode prevToPrevNode=null;
		DoubleLinkedListNode nextNode=null; DoubleLinkedListNode nextToNextNode=null;
		if (currentNode.getPreviousNode() != null) {
			prevNode=currentNode.getPreviousNode();
			if (prevNode.getPreviousNode() != null) {
				prevToPrevNode=prevNode.getPreviousNode();
			}				
		}
		if (currentNode.getNextNode() != null) {
			nextNode=currentNode.getNextNode();
			if (nextNode.getNextNode() != null) {
				nextToNextNode=nextNode.getNextNode();
			}				
		}
		if ((prevNode == null) || ((prevNode != null) && (prevToPrevNode==null))) {
			doubleLinkedList.setFirstNode(nextToNextNode);
			if(doubleLinkedList.getFirstNode() !=null) {
				doubleLinkedList.getFirstNode().setPreviousNode(null);
			}
			return;
		}
		if ((nextNode == null) || ((nextNode != null) && (nextToNextNode==null))) {
			prevToPrevNode.setNextNode(null);
			return;
		}
		if ((prevToPrevNode !=null)&&(nextToNextNode!=null)) {
			prevToPrevNode.setNextNode(nextToNextNode);
			nextToNextNode.setPreviousNode(prevToPrevNode);				
		}
	}catch (Exception exception) {
			System.out.print("Exception: "+ exception);			
	}
				
}

Click here to download and run code and test cases !