package com.java2novice.ds.linkedlist; public class SinglyLinkedListImpl<T> { private Node<T> head; private Node<T> tail; public void add(T element){ Node<T> nd = new Node<T>(); nd.setValue(element); System.out.println("Adding: "+element); <comment> /** * check if the list is empty */</comment> if(head == null){ <comment> //since there is only one element, both head and //tail points to the same object.</comment> head = nd; tail = nd; } else { <comment> //set current tail next link to new node</comment> tail.setNextRef(nd); <comment>//set tail as newly created node</comment> tail = nd; } } public void addAfter(T element, T after){ Node<T> tmp = head; Node<T> refNode = null; System.out.println("Traversing to all nodes.."); <comment>/** * Traverse till given element */</comment> while(true){ if(tmp == null){ break; } if(tmp.compareTo(after) == 0){ <comment>//found the target node, add after this node</comment> refNode = tmp; break; } tmp = tmp.getNextRef(); } if(refNode != null){ <comment>//add element after the target node</comment> Node<T> nd = new Node<T>(); nd.setValue(element); nd.setNextRef(tmp.getNextRef()); if(tmp == tail){ tail = nd; } tmp.setNextRef(nd); } else { System.out.println("Unable to find the given element..."); } } public void deleteFront(){ if(head == null){ System.out.println("Underflow..."); } Node<T> tmp = head; head = tmp.getNextRef(); if(head == null){ tail = null; } System.out.println("Deleted: "+tmp.getValue()); } public void deleteAfter(T after){ Node<T> tmp = head; Node<T> refNode = null; System.out.println("Traversing to all nodes.."); <comment> /** * Traverse till given element */</comment> while(true){ if(tmp == null){ break; } if(tmp.compareTo(after) == 0){ <comment>//found the target node, add after this node</comment> refNode = tmp; break; } tmp = tmp.getNextRef(); } if(refNode != null){ tmp = refNode.getNextRef(); refNode.setNextRef(tmp.getNextRef()); if(refNode.getNextRef() == null){ tail = refNode; } System.out.println("Deleted: "+tmp.getValue()); } else { System.out.println("Unable to find the given element..."); } } public void traverse(){ Node<T> tmp = head; while(true){ if(tmp == null){ break; } System.out.println(tmp.getValue()); tmp = tmp.getNextRef(); } } public static void main(String a[]){ SinglyLinkedListImpl<Integer> sl = new SinglyLinkedListImpl<Integer>(); sl.add(3); sl.add(32); sl.add(54); sl.add(89); sl.addAfter(76, 54); sl.deleteFront(); sl.deleteAfter(76); sl.traverse(); } } class Node<T> implements Comparable<T> { private T value; private Node<T> nextRef; public T getValue() { return value; } public void setValue(T value) { this.value = value; } public Node<T> getNextRef() { return nextRef; } public void setNextRef(Node<T> ref) { this.nextRef = ref; } @Override public int compareTo(T arg) { if(arg == this.value){ return 0; } else { return 1; } } }