Custom Linked List in mid value and reverse with iteration OR How to Find a middle element in a link list without traversing the entire list?

public class LinkedListDemo {
public static void main(String args[]) {
System.out.println("..................................................");
System.out.println("---------------------------String-----------------");
System.out.println("..................................................");
LinkedListMidElement<String> cc=new LinkedListMidElement<String>();
cc.add("data5");
cc.add("data6");
cc.add("data7");
cc.add("data8");
cc.add("data9");
cc.add("data1");
cc.add("data2");
cc.add("data3");
cc.add("data4");
cc.displayLinkedList();
cc.findMiddle();
cc.reverseDisplay();
System.out.println("..................................................");
System.out.println("---------------------------Integer-----------------");
System.out.println("..................................................");
LinkedListMidElement<Integer> integer=new LinkedListMidElement<Integer>();
integer.add(5);
integer.add(6);
integer.add(7);
integer.add(8);
integer.add(9);
integer.add(1);
integer.add(2);
integer.add(3);
integer.add(4);
integer.displayLinkedList();
integer.findMiddle();
integer.reverseDisplay();
}
}


Step 2>

public class LinkedListNode<T> {
   public T data; // data in Node.
   public LinkedListNode<T> next;
   // points to next Node in list.

   /**
    * Constructor
    */
   public LinkedListNode(T data){
          this.data = data;
   }
   /**
    * Display Node's data
    */
   public void displayNode() {
          System.out.print( data + " ");
   }
}


Step 3>
public class LinkedListMidElement<T> {

private LinkedListNode<T> first;

/**
* generic Single LinkedList constructor
*/
public LinkedListMidElement() {
first = null;
}

/**
* Insert New Node at first position of generic Single LinkedList
*/
public void add(T data) {
LinkedListNode<T> newNode = new LinkedListNode<T>(data); // Creation of
// New Node.
newNode.next = first; // newLink ---> old first
first = newNode; // first ---> newNode
}

/**
* Deletes first Node of generic Single LinkedList
*/
public LinkedListNode<T> deleteFirst() {
if (first == null) { // means LinkedList in empty, throw exception.
}
LinkedListNode<T> tempNode = first; // save reference to first Node in
// tempNode- so that we could return saved reference.
first = first.next; // delete first Node (make first point to second
// node)
return tempNode; // return tempNode (i.e. deleted Node)
}

/**
* Display generic Single LinkedList
*/
public void displayLinkedList() {
System.out.print("Displaying LinkedList [first--->last]: ");
LinkedListNode<T> tempDisplay = first; // start at the beginning of
System.out.println(); // linkedList
while (tempDisplay != null) { // Executes until we don't find end of
// list.
tempDisplay.displayNode();
tempDisplay = tempDisplay.next; // move to next Node
}
System.out.println();
}

/**
*
* @return
*/
public T findMiddle() {
LinkedListNode<T> head = first;
LinkedListNode<T> current = head;
int length = 0;
LinkedListNode<T> middle = head;
while (current.next != null) {
length++;
if (length % 2 == 0) {
middle = middle.next;
}
current = current.next;
}
System.out.println("Mid Element of Linked List : "+middle.data);
return middle.data;
}


public void reverseDisplay(){
System.out.print("Displaying LinkedList in reverse order [last--->first]: ");
System.out.println();
LinkedListNode<T> reverseDisplay = reverse(first); // start at the beginning of
// linkedList
while (reverseDisplay != null) { // Executes until we don't find end of
// list.
reverseDisplay.displayNode();
reverseDisplay = reverseDisplay.next; // move to next Node
}
System.out.println();
}
/**
*
* @param node
* @return
*/
public LinkedListNode<T> reverse(LinkedListNode<T> node) {
    LinkedListNode<T> prev = null;
    LinkedListNode<T> current = node;
    LinkedListNode<T> next = null;
        while (current != null) {
            next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        node = prev;
        return node;
    }

}


Out put:

..................................................
---------------------------String-----------------
..................................................
Displaying LinkedList [first--->last]:
data4 data3 data2 data1 data9 data8 data7 data6 data5
Mid Element of Linked List : data9
Displaying LinkedList in reverse order [last--->first]:
data5 data6 data7 data8 data9 data1 data2 data3 data4
..................................................
---------------------------Integer-----------------
..................................................
Displaying LinkedList [first--->last]:
4 3 2 1 9 8 7 6 5
Mid Element of Linked List : 9
Displaying LinkedList in reverse order [last--->first]:
5 6 7 8 9 1 2 3 4

Previous
Next Post »