-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCustomLinkedList.java
124 lines (104 loc) · 1.99 KB
/
CustomLinkedList.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package collections;
// geeksforgeeks.org/java-implementing-iterator-and-iterable-interface/
import java.util.Iterator;
// Custom Linked List class using Generics
class List<T> implements Iterable<T> {
Node<T> head, tail;
// add new Element at tail of the linked list in O(1)
public void add(T data)
{
Node<T> node = new Node<>(data, null);
if (head == null)
tail = head = node;
else {
tail.setNext(node);
tail = node;
}
}
// return Head
public Node<T> getHead()
{
return head;
}
// return Tail
public Node<T> getTail()
{
return tail;
}
// return Iterator instance
public Iterator<T> iterator()
{
return new ListIterator<T>(this);
}
}
class ListIterator<T> implements Iterator<T> {
Node<T> current;
// initialize pointer to head of the list for iteration
public ListIterator(List<T> list)
{
current = list.getHead();
}
// returns false if next element does not exist
@Override
public boolean hasNext()
{
return current != null;
}
// return current data and update pointer
@Override
public T next()
{
T data = current.getData();
current = current.getNext();
return data;
}
// implement if needed
@Override
public void remove()
{
throw new UnsupportedOperationException();
}
}
// Constituent Node of Linked List
class Node<T> {
T data;
Node<T> next;
public Node(T data, Node<T> next)
{
this.data = data;
this.next = next;
}
// Setter getter methods for Data and Next Pointer
public void setData(T data)
{
this.data = data;
}
public void setNext(Node<T> next)
{
this.next = next;
}
public T getData()
{
return data;
}
public Node<T> getNext()
{
return next;
}
}
// Driver class
class Main {
public static void main(String[] args)
{
// Create Linked List
List<String> myList = new List<>();
// Add Elements
myList.add("abc");
myList.add("mno");
myList.add("pqr");
myList.add("xyz");
// Iterate through the list using For Each Loop
for (String string : myList)
System.out.println(string);
}
}