Merge pull request #10522 from sk1418/Circular_linked_list
fix the deleting method
This commit is contained in:
commit
1c32920b76
@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
public class CircularLinkedList {
|
public class CircularLinkedList {
|
||||||
|
|
||||||
final Logger LOGGER = LoggerFactory.getLogger(CircularLinkedList.class);
|
final Logger logger = LoggerFactory.getLogger(CircularLinkedList.class);
|
||||||
|
|
||||||
private Node head = null;
|
private Node head = null;
|
||||||
private Node tail = null;
|
private Node tail = null;
|
||||||
@ -42,25 +42,30 @@ public class CircularLinkedList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void deleteNode(int valueToDelete) {
|
public void deleteNode(int valueToDelete) {
|
||||||
|
|
||||||
Node currentNode = head;
|
Node currentNode = head;
|
||||||
|
if (head == null) {
|
||||||
if (head != null) {
|
return;
|
||||||
if (currentNode.value == valueToDelete) {
|
}
|
||||||
head = head.nextNode;
|
|
||||||
tail.nextNode = head;
|
|
||||||
} else {
|
|
||||||
do {
|
do {
|
||||||
Node nextNode = currentNode.nextNode;
|
Node nextNode = currentNode.nextNode;
|
||||||
if (nextNode.value == valueToDelete) {
|
if (nextNode.value == valueToDelete) {
|
||||||
|
if (tail == head) {
|
||||||
|
head = null;
|
||||||
|
tail = null;
|
||||||
|
} else {
|
||||||
currentNode.nextNode = nextNode.nextNode;
|
currentNode.nextNode = nextNode.nextNode;
|
||||||
|
if (head == nextNode) {
|
||||||
|
head = head.nextNode;
|
||||||
|
}
|
||||||
|
if (tail == nextNode) {
|
||||||
|
tail = currentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
currentNode = currentNode.nextNode;
|
currentNode = nextNode;
|
||||||
} while (currentNode != head);
|
} while (currentNode != head);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void traverseList() {
|
public void traverseList() {
|
||||||
|
|
||||||
@ -68,7 +73,7 @@ public class CircularLinkedList {
|
|||||||
|
|
||||||
if (head != null) {
|
if (head != null) {
|
||||||
do {
|
do {
|
||||||
LOGGER.info(currentNode.value + " ");
|
logger.info(currentNode.value + " ");
|
||||||
currentNode = currentNode.nextNode;
|
currentNode = currentNode.nextNode;
|
||||||
} while (currentNode != head);
|
} while (currentNode != head);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.baeldung.circularlinkedlist;
|
package com.baeldung.circularlinkedlist;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class CircularLinkedListUnitTest {
|
public class CircularLinkedListUnitTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -23,7 +23,7 @@ public class CircularLinkedListUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenACircularLinkedList_WhenDeletingElements_ThenListDoesNotContainThoseElements() {
|
public void givenACircularLinkedList_WhenDeletingInOrderHeadMiddleTail_ThenListDoesNotContainThoseElements() {
|
||||||
CircularLinkedList cll = createCircularLinkedList();
|
CircularLinkedList cll = createCircularLinkedList();
|
||||||
|
|
||||||
assertTrue(cll.containsNode(13));
|
assertTrue(cll.containsNode(13));
|
||||||
@ -39,6 +39,32 @@ public class CircularLinkedListUnitTest {
|
|||||||
assertFalse(cll.containsNode(46));
|
assertFalse(cll.containsNode(46));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenACircularLinkedList_WhenDeletingInOrderTailMiddleHead_ThenListDoesNotContainThoseElements() {
|
||||||
|
CircularLinkedList cll = createCircularLinkedList();
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(46));
|
||||||
|
cll.deleteNode(46);
|
||||||
|
assertFalse(cll.containsNode(46));
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(1));
|
||||||
|
cll.deleteNode(1);
|
||||||
|
assertFalse(cll.containsNode(1));
|
||||||
|
|
||||||
|
assertTrue(cll.containsNode(13));
|
||||||
|
cll.deleteNode(13);
|
||||||
|
assertFalse(cll.containsNode(13));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenACircularLinkedListWithOneNode_WhenDeletingElement_ThenListDoesNotContainTheElement() {
|
||||||
|
CircularLinkedList cll = new CircularLinkedList();
|
||||||
|
cll.addNode(1);
|
||||||
|
cll.deleteNode(1);
|
||||||
|
assertFalse(cll.containsNode(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private CircularLinkedList createCircularLinkedList() {
|
private CircularLinkedList createCircularLinkedList() {
|
||||||
CircularLinkedList cll = new CircularLinkedList();
|
CircularLinkedList cll = new CircularLinkedList();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user