Applications
LL
package com.gs.corejava.datastructures;
public class MySinglyLinkedList<T> {
private class MyNode<E extends Object> {
E data;
MyNode<E> next = null;
public MyNode() {
}
public MyNode(E data) {
this.data = data;
}
}
private MyNode<T> start;
private int size = 0;
private MyNode<T> currentNode;
public MySinglyLinkedList() {
start = new MyNode<T>();
start.next = null;
}
public void add(T data) {
MyNode<T> myNode = new MyNode<T>(data);
MyNode<T> head = start;
MyNode<T> prev = start;
if (null == currentNode) {
while (null != head) {
prev = head;
head = head.next;
}
currentNode = myNode;
prev.next = currentNode;
} else {
currentNode.next = myNode;
currentNode = myNode;
}
size++;
}
public void addFirst(T data) {
MyNode<T> myNode = new MyNode<T>(data);
MyNode<T> head = start;
myNode.next = head.next;
head.next = myNode;
size++;
}
public void addLast(T data) {
add(data);
}
public void add(T data, int index) {
MyNode<T> myNode = new MyNode<T>(data);
MyNode<T> head = start;
MyNode<T> prev = start;
int currentIndex = 0;
while (null != head && currentIndex <= index) {
prev = head;
head = head.next;
currentIndex++;
}
myNode.next = prev.next;
prev.next = myNode;
size++;
}
public MyNode<T> remove(T data) {
MyNode<T> node = new MyNode<T>(data);
MyNode<T> head = start;
MyNode<T> prev = start;
while (null != head) {
if (null != node.data && node.data.equals(head.data)) {
break;
}
prev = head;
head = head.next;
}
prev.next = head.next;
head = null;
size--;
return node;
}
public MyNode<T> remove(int index) {
MyNode<T> head = start;
MyNode<T> prev = start;
int currentIndex = 0;
while (null != head && currentIndex <= index) {
prev = head;
head = head.next;
currentIndex++;
}
MyNode<T> myNodeToReturn = head;
prev.next = head.next;
head = null;
size--;
return myNodeToReturn;
}
public Object[] toArray() {
Object[] array = new Object[size];
int k = 0;
MyNode<T> head = start.next;
while (null != head) {
array[k] = head.data;
k++;
head = head.next;
}
return array;
}
}
Last updated
Was this helpful?