Skip to content

Commit 678d42b

Browse files
committed
fix the deleting method
1 parent f0816fe commit 678d42b

File tree

2 files changed

+51
-20
lines changed

2 files changed

+51
-20
lines changed

data-structures/src/main/java/com/baeldung/circularlinkedlist/CircularLinkedList.java

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public class CircularLinkedList {
77

8-
final Logger LOGGER = LoggerFactory.getLogger(CircularLinkedList.class);
8+
final Logger logger = LoggerFactory.getLogger(CircularLinkedList.class);
99

1010
private Node head = null;
1111
private Node tail = null;
@@ -42,24 +42,29 @@ public boolean containsNode(int searchValue) {
4242
}
4343

4444
public void deleteNode(int valueToDelete) {
45-
4645
Node currentNode = head;
47-
48-
if (head != null) {
49-
if (currentNode.value == valueToDelete) {
50-
head = head.nextNode;
51-
tail.nextNode = head;
52-
} else {
53-
do {
54-
Node nextNode = currentNode.nextNode;
55-
if (nextNode.value == valueToDelete) {
56-
currentNode.nextNode = nextNode.nextNode;
57-
break;
46+
if (head == null) {
47+
return;
48+
}
49+
do {
50+
Node nextNode = currentNode.nextNode;
51+
if (nextNode.value == valueToDelete) {
52+
if (tail == head) {
53+
head = null;
54+
tail = null;
55+
} else {
56+
currentNode.nextNode = nextNode.nextNode;
57+
if (head == nextNode) {
58+
head = head.nextNode;
59+
}
60+
if (tail == nextNode) {
61+
tail = currentNode;
5862
}
59-
currentNode = currentNode.nextNode;
60-
} while (currentNode != head);
63+
}
64+
break;
6165
}
62-
}
66+
currentNode = nextNode;
67+
} while (currentNode != head);
6368
}
6469

6570
public void traverseList() {
@@ -68,7 +73,7 @@ public void traverseList() {
6873

6974
if (head != null) {
7075
do {
71-
LOGGER.info(currentNode.value + " ");
76+
logger.info(currentNode.value + " ");
7277
currentNode = currentNode.nextNode;
7378
} while (currentNode != head);
7479
}

data-structures/src/test/java/com/baeldung/circularlinkedlist/CircularLinkedListUnitTest.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.baeldung.circularlinkedlist;
22

3+
import org.junit.Test;
4+
35
import static org.junit.Assert.assertFalse;
46
import static org.junit.Assert.assertTrue;
57

6-
import org.junit.Test;
7-
88
public class CircularLinkedListUnitTest {
99

1010
@Test
@@ -23,7 +23,7 @@ public void givenACircularLinkedList_WhenLookingForNonExistingElement_ThenReturn
2323
}
2424

2525
@Test
26-
public void givenACircularLinkedList_WhenDeletingElements_ThenListDoesNotContainThoseElements() {
26+
public void givenACircularLinkedList_WhenDeletingInOrderHeadMiddleTail_ThenListDoesNotContainThoseElements() {
2727
CircularLinkedList cll = createCircularLinkedList();
2828

2929
assertTrue(cll.containsNode(13));
@@ -39,6 +39,32 @@ public void givenACircularLinkedList_WhenDeletingElements_ThenListDoesNotContain
3939
assertFalse(cll.containsNode(46));
4040
}
4141

42+
@Test
43+
public void givenACircularLinkedList_WhenDeletingInOrderTailMiddleHead_ThenListDoesNotContainThoseElements() {
44+
CircularLinkedList cll = createCircularLinkedList();
45+
46+
assertTrue(cll.containsNode(46));
47+
cll.deleteNode(46);
48+
assertFalse(cll.containsNode(46));
49+
50+
assertTrue(cll.containsNode(1));
51+
cll.deleteNode(1);
52+
assertFalse(cll.containsNode(1));
53+
54+
assertTrue(cll.containsNode(13));
55+
cll.deleteNode(13);
56+
assertFalse(cll.containsNode(13));
57+
}
58+
59+
@Test
60+
public void givenACircularLinkedListWithOneNode_WhenDeletingElement_ThenListDoesNotContainTheElement() {
61+
CircularLinkedList cll = new CircularLinkedList();
62+
cll.addNode(1);
63+
cll.deleteNode(1);
64+
assertFalse(cll.containsNode(1));
65+
}
66+
67+
4268
private CircularLinkedList createCircularLinkedList() {
4369
CircularLinkedList cll = new CircularLinkedList();
4470

0 commit comments

Comments
 (0)