Skip to content

Commit 9d695a4

Browse files
dhruvgupta77Dhruv Gupta
andauthored
Fixed iterator in ListStack to return elements in LIFO order (#1239)
Co-authored-by: Dhruv Gupta <dhruv.gupta01@nagarro.com>
1 parent 91b3058 commit 9d695a4

File tree

2 files changed

+31
-1
lines changed
  • src
    • main/java/com/williamfiset/algorithms/datastructures/stack
    • test/java/com/williamfiset/algorithms/datastructures/stack

2 files changed

+31
-1
lines changed

src/main/java/com/williamfiset/algorithms/datastructures/stack/ListStack.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ public int search(T elem) {
5555
// Allow users to iterate through the stack using an iterator
5656
@Override
5757
public java.util.Iterator<T> iterator() {
58-
return list.iterator();
58+
return list.descendingIterator();
5959
}
6060
}

src/test/java/com/williamfiset/algorithms/datastructures/stack/StackTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8+
import org.junit.jupiter.api.Test;
89
import org.junit.jupiter.params.ParameterizedTest;
910
import org.junit.jupiter.params.provider.MethodSource;
1011

@@ -78,4 +79,33 @@ public void testExhaustively(Stack<Integer> stack) {
7879
assertThat(stack.size()).isEqualTo(0);
7980
assertThat(stack.isEmpty()).isTrue();
8081
}
82+
83+
@Test
84+
public void testIteratorLifoOrder() {
85+
ListStack<Integer> stack = new ListStack<>();
86+
stack.push(1);
87+
stack.push(2);
88+
stack.push(3);
89+
90+
List<Integer> iterated = new ArrayList<>();
91+
for (Integer v : stack) iterated.add(v);
92+
93+
// Expect iteration from top (3) to bottom (1)
94+
assertThat(iterated).containsExactly(3, 2, 1).inOrder();
95+
96+
// Iterator should not have removed elements
97+
assertThat(stack.size()).isEqualTo(3);
98+
assertThat(stack.peek()).isEqualTo(3);
99+
}
100+
101+
@Test
102+
public void testIteratorOnEmptyStack() {
103+
ListStack<Integer> stack = new ListStack<>();
104+
105+
List<Integer> iterated = new ArrayList<>();
106+
for (Integer v : stack) iterated.add(v);
107+
108+
assertThat(iterated).isEmpty();
109+
assertThat(stack.isEmpty()).isTrue();
110+
}
81111
}

0 commit comments

Comments
 (0)