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?