From ce4a905a2db9ab2c5467ed2b5b9fd8369b3abc37 Mon Sep 17 00:00:00 2001 From: tarandeepaingh-wd Date: Sat, 20 Dec 2025 17:56:27 +0530 Subject: [PATCH 1/5] feat:Added Stack Implementation Using LinkedList --- .../stacks/StackUsingLinkedList.java | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java diff --git a/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java b/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java new file mode 100644 index 000000000000..25cec3b1b941 --- /dev/null +++ b/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java @@ -0,0 +1,89 @@ +package com.thealgorithms.stacks; + +class Node { + T data; + Node next; + + public Node(T data) { + this.data = data; + this.next = null; + } +} + +public class StackUsingLinkedList { + private Node top; + private int size; + + public StackUsingLinkedList() { + top = null; + size = 0; + } + + // Push operation + public void push(T data) { + Node temp = new Node<>(data); + temp.next = top; + top = temp; + size++; + } + + // Pop operation + public T pop() { + if (top == null) { + throw new RuntimeException("Stack Underflow"); + } + T value = top.data; + Node temp = top; + top = top.next; + temp.next = null; // help GC + size--; + return value; + } + + // Peek operation + public T peek() { + if (top == null) { + throw new RuntimeException("Stack is empty"); + } + return top.data; + } + + // Size operation (O(1)) + public int size() { + return size; + } + public boolean isEmpty() { + return size == 0; + } +} +class demo{ + public static void main(String[] args) { + StackUsingLinkedList stack = new StackUsingLinkedList<>(); + + System.out.println("Is stack empty? " + stack.isEmpty()); + System.out.println("Initial size: " + stack.size()); + + + stack.push(10); + stack.push(20); + stack.push(30); + + System.out.println("After pushes:"); + System.out.println("Top element: " + stack.peek()); // 30 + System.out.println("Size: " + stack.size()); // 3 + + // Pop elements + System.out.println("Popped: " + stack.pop()); // 30 + System.out.println("Popped: " + stack.pop()); // 20 + + System.out.println("After pops:"); + System.out.println("Top element: " + stack.peek()); // 10 + System.out.println("Size: " + stack.size()); // 1 + + System.out.println("Is stack empty? " + stack.isEmpty()); + + + stack.pop(); + System.out.println("Is stack empty after final pop? " + stack.isEmpty()); + } +} From 1da26b4c0401fd4498d4aeccaf100237b6bead8e Mon Sep 17 00:00:00 2001 From: tarandeepaingh-wd Date: Sat, 20 Dec 2025 18:35:37 +0530 Subject: [PATCH 2/5] test: add unit tests for StackUsingLinkedList --- .../stacks/StackUsingLinkedListTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java diff --git a/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java new file mode 100644 index 000000000000..05f92075dca4 --- /dev/null +++ b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java @@ -0,0 +1,52 @@ +package com.thealgorithms.stacks; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class StackUsingLinkedListTest { + private StackUsingLinkedList stack; + + @BeforeEach + public void setUp() { + stack = new StackUsingLinkedList<>(); + } + + @Test + public void testPushAndPeek() { + stack.push(10); + stack.push(20); + + assertEquals(20, stack.peek()); + } + + @Test + public void testPop() { + stack.push(5); + stack.push(15); + int popped = stack.pop(); + assertEquals(15, popped); + assertEquals(5, stack.peek()); + } + + @Test + public void testIsEmpty() { + assertTrue(stack.isEmpty()); + stack.push(1); + assertFalse(stack.isEmpty()); + } + + @Test + public void testSize() { + assertEquals(0, stack.size()); + stack.push(1); + stack.push(2); + assertEquals(2, stack.size()); + } + + @Test + public void testPopOnEmptyStack() { + assertThrows(RuntimeException.class, () -> stack.pop()); + } +} From 5b327c8fa4be18cdd38b94b156a523efada51073 Mon Sep 17 00:00:00 2001 From: tarandeepaingh-wd Date: Sat, 20 Dec 2025 18:37:48 +0530 Subject: [PATCH 3/5] feat t:Added Stack Implementation Using LinkedList --- .../stacks/StackUsingLinkedList.java | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java b/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java index 25cec3b1b941..8dd2825b9f2d 100644 --- a/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java +++ b/src/main/java/com/thealgorithms/stacks/StackUsingLinkedList.java @@ -56,34 +56,3 @@ public boolean isEmpty() { return size == 0; } } -class demo{ - public static void main(String[] args) { - StackUsingLinkedList stack = new StackUsingLinkedList<>(); - - System.out.println("Is stack empty? " + stack.isEmpty()); - System.out.println("Initial size: " + stack.size()); - - - stack.push(10); - stack.push(20); - stack.push(30); - - System.out.println("After pushes:"); - System.out.println("Top element: " + stack.peek()); // 30 - System.out.println("Size: " + stack.size()); // 3 - - // Pop elements - System.out.println("Popped: " + stack.pop()); // 30 - System.out.println("Popped: " + stack.pop()); // 20 - - System.out.println("After pops:"); - System.out.println("Top element: " + stack.peek()); // 10 - System.out.println("Size: " + stack.size()); // 1 - - System.out.println("Is stack empty? " + stack.isEmpty()); - - - stack.pop(); - System.out.println("Is stack empty after final pop? " + stack.isEmpty()); - } -} From 59789730daf92bc5fa2f25626eaec7b54d5e0507 Mon Sep 17 00:00:00 2001 From: tarandeepaingh-wd Date: Sat, 20 Dec 2025 18:43:49 +0530 Subject: [PATCH 4/5] test: add unit tests for StackUsingLinkedList --- .../com/thealgorithms/stacks/StackUsingLinkedListTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java index 05f92075dca4..27f2da49ce0e 100644 --- a/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java +++ b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java @@ -49,4 +49,10 @@ public void testSize() { public void testPopOnEmptyStack() { assertThrows(RuntimeException.class, () -> stack.pop()); } + @Test + public void testPeekOnEmptyStackThrowsException() { + RuntimeException exception = + assertThrows(RuntimeException.class, () -> stack.peek()); + assertEquals("Stack is empty", exception.getMessage()); + } } From 6fd48950b65b14da7926fab8c8605303e66183e0 Mon Sep 17 00:00:00 2001 From: tarandeepaingh-wd Date: Sat, 20 Dec 2025 18:52:55 +0530 Subject: [PATCH 5/5] test: add unit tests for StackUsingLinkedList --- .../com/thealgorithms/stacks/StackUsingLinkedListTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java index 27f2da49ce0e..38ab52c8f8a1 100644 --- a/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java +++ b/src/test/java/com/thealgorithms/stacks/StackUsingLinkedListTest.java @@ -1,9 +1,9 @@ package com.thealgorithms.stacks; - +import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; + public class StackUsingLinkedListTest { private StackUsingLinkedList stack; @@ -51,8 +51,7 @@ public void testPopOnEmptyStack() { } @Test public void testPeekOnEmptyStackThrowsException() { - RuntimeException exception = - assertThrows(RuntimeException.class, () -> stack.peek()); + RuntimeException exception = assertThrows(RuntimeException.class, () -> stack.peek()); assertEquals("Stack is empty", exception.getMessage()); } }