Make SinglyLinkedList
Iterable
(#4334)
This commit is contained in:
parent
80a4435038
commit
ea15f2bd98
@ -1,11 +1,13 @@
|
||||
package com.thealgorithms.datastructures.lists;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
/**
|
||||
* https://en.wikipedia.org/wiki/Linked_list
|
||||
*/
|
||||
public class SinglyLinkedList extends Node {
|
||||
public class SinglyLinkedList implements Iterable<Integer> {
|
||||
|
||||
/**
|
||||
* Head refer to the front of the list
|
||||
@ -213,10 +215,8 @@ public class SinglyLinkedList extends Node {
|
||||
*/
|
||||
public int count() {
|
||||
int count = 0;
|
||||
Node cur = head;
|
||||
while (cur != null) {
|
||||
cur = cur.next;
|
||||
count++;
|
||||
for (final var element : this) {
|
||||
++count;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
@ -228,13 +228,11 @@ public class SinglyLinkedList extends Node {
|
||||
* @return {@code true} if key is present in the list, otherwise
|
||||
* {@code false}.
|
||||
*/
|
||||
public boolean search(int key) {
|
||||
Node cur = head;
|
||||
while (cur != null) {
|
||||
if (cur.value == key) {
|
||||
public boolean search(final int key) {
|
||||
for (final var element : this) {
|
||||
if (element == key) {
|
||||
return true;
|
||||
}
|
||||
cur = cur.next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -242,10 +240,8 @@ public class SinglyLinkedList extends Node {
|
||||
@Override
|
||||
public String toString() {
|
||||
StringJoiner joiner = new StringJoiner("->");
|
||||
Node cur = head;
|
||||
while (cur != null) {
|
||||
joiner.add(cur.value + "");
|
||||
cur = cur.next;
|
||||
for (final var element : this) {
|
||||
joiner.add(element + "");
|
||||
}
|
||||
return joiner.toString();
|
||||
}
|
||||
@ -452,6 +448,34 @@ public class SinglyLinkedList extends Node {
|
||||
instance.deleteDuplicates();
|
||||
instance.print();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<Integer> iterator() {
|
||||
return new SinglyLinkedListIterator();
|
||||
}
|
||||
|
||||
private class SinglyLinkedListIterator implements Iterator<Integer> {
|
||||
private Node current;
|
||||
|
||||
SinglyLinkedListIterator() {
|
||||
current = head;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return current != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer next() {
|
||||
if (!hasNext()) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
final var value = current.value;
|
||||
current = current.next;
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3,6 +3,7 @@ package com.thealgorithms.datastructures.lists;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@ -207,4 +208,50 @@ public class SinglyLinkedListTest {
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void readWithEnhancedForLoopTest() {
|
||||
final var expeced = new ArrayList<Integer>(Arrays.asList(10, 20, 30));
|
||||
|
||||
SinglyLinkedList list = new SinglyLinkedList();
|
||||
for (final var x : expeced) {
|
||||
list.insert(x);
|
||||
}
|
||||
|
||||
var readElements = new ArrayList<Integer>();
|
||||
for (final var x : list) {
|
||||
readElements.add(x);
|
||||
}
|
||||
|
||||
assertEquals(readElements, expeced);
|
||||
}
|
||||
|
||||
@Test
|
||||
void toStringTest() {
|
||||
SinglyLinkedList list = new SinglyLinkedList();
|
||||
list.insert(1);
|
||||
list.insert(2);
|
||||
list.insert(3);
|
||||
assertEquals("1->2->3", list.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
void toStringForEmptyListTest() {
|
||||
SinglyLinkedList list = new SinglyLinkedList();
|
||||
assertEquals("", list.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
void countTest() {
|
||||
SinglyLinkedList list = new SinglyLinkedList();
|
||||
list.insert(10);
|
||||
list.insert(20);
|
||||
assertEquals(2, list.count());
|
||||
}
|
||||
|
||||
@Test
|
||||
void countForEmptyListTest() {
|
||||
SinglyLinkedList list = new SinglyLinkedList();
|
||||
assertEquals(0, list.count());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user