java/test/Llist.java
2025-04-29 17:51:52 +03:00

123 lines
3.3 KiB
Java

public class LList<T> implements ListInterface<T>{
private Node firstNode;
private int numOfEntries;
public LList () {
initializeDataFields();
}
public void clear () {
initializeDataFields();
}
public void add (T newEntry) {
Node newNode = new Node(newEntry);
if (isEmpty) {
firstNode = newNode;
} else {
lastNode = getNodeAt(numOfEntries);
lastNode.setNextNode(newNode);
}
numOfEntries++;
}
public void add (int newPos, T newEntry) {
if((newPos < numOfEntries) && (newPos > 0)) {
Node newNode = new Node(newEntry);
if (newPos == 1) {
newNode.setNextNode(firstNode);
firstNode = newNode;
} else {
Node nodeBefore = getNodeAt(newPos - 1);
Node nodeAfter = nodeBefore.getNextNode();
newNode.setNextNode(nodeAfter);
nodeBefore.setNextNode(newNode);
}
numOfEntries++;
} else {
throw new e("Nope");
}
}
public boolean isEmpty(){
return ((numOfEntries > 0));
}
public T[] toArray () {
@SuppressWarnings("unchecked")
T[] result = (T[])new Object[numOfEntries];
Node currentNode = firstNode;
for (int i = 0; i < numOfEntries; i++) {
result[i] = currentNode.getData();
currentNode = currentNode.getNextNode();
}
return result;
}
public T remove (int givenPos) {
T result = null;
if (givenPos <= numOfEntries && givenPos > 0) {
if (!isEmpty()) {
if (givenPos == 1) {
result = firstNode.getData();
firstNode = firstNode.getNextNode();
} else {
Node nodeBefore = getNodeAt(givenPos - 1);
Node nodeToRemove = nodeBefore.getNextNode();
result = nodeToRemove.getData();
Node nodeAfter = nodeToRemove.getNextNode();
nodeBefore.setNextNode(nodeAfter);
}
numOfEntries--;
return result;
} else {
throw new e("NOOO");
}
}
}
public T replace (int givenPos, T newEntry) {
if(givenPos > 0 && givenPos <= numOfEntries) {
Node desiredNode = getNodeAt(givenPos);
T originalEntry = desiredNode.getData();
desiredNode.setData(newEntry);
return originalEntry;
} else {
throw new e("NOOOOOO");
}
}
// Start from node
private class Node {
private T data;
private Node next;
private Node (T dataPortion) {
this(dataPortion, null);
}
private Node (T dataPortion, Node nextNode) {
data = dataPortion;
next = nextNode;
}
private T getData () {
return data;
}
private void setData (T newData) {
data = newData;
}
private Node getNextNode () {
return next;
}
private Node setNextNode (Node nextNode) {
next = NextNode;
}
}
}