This blog will soon be merged with

JavaByPatel

which explains each solution in detail, to visit new blog, click JavaByPatel

Sunday, 24 May 2015

Reverse a linked list.



package linkedlist.singly;

//How to reverse Singly Linked List
//Simple, just have 3 pointers. Start reversing it, Let us take example and understand, Say we have Link list as,
//      1  ->  2  ->  3  ->  4  ->  5  
//p1 <- p2 <-  p3, swap pointers
//      p1 <-  p2 <-  p3, swap pointers
//             p1 <-  p2 <-  p3, swap pointers
//                    p1 <-  p2 <-  p3, swap pointers
//                           p1 <-  p2 <-  p3, swap pointers
//                                  p1 <-  p2 <-  p3 ----------> loop break as p2 become null
// When p2 become null, observe p1, it contains fully reversed link list.

public class ReverseTheLinkedList {
 Node startNode;
 
 public static void main(String[] args) {
  ReverseTheLinkedList reverseTheLinkedList = new ReverseTheLinkedList();
  reverseTheLinkedList.addNode(new Node(10));
  reverseTheLinkedList.addNode(new Node(20));
  reverseTheLinkedList.addNode(new Node(30));
  reverseTheLinkedList.addNode(new Node(40));
  reverseTheLinkedList.addNode(new Node(50));

  reverseTheLinkedList.printLinkList();
  reverseTheLinkedList.reverseLinkList();
  System.out.println("\nReverse:");
  reverseTheLinkedList.printLinkList();
 }

 public void reverseLinkList(){
  Node backNode = null;
  while(startNode!=null){
   Node aheadNode = startNode.getNext();
   startNode.setNext(backNode);

   backNode = startNode;
   startNode = aheadNode;
  }
  startNode = backNode;
 }

 private void printLinkList() {
  Node tempNode = startNode;
  while(tempNode!=null){
   System.out.print(tempNode.getData() + " ");
   tempNode = tempNode.getNext();
  }
 }

 private void addNode(Node node) {
  if(startNode!=null){
   Node tempNode = startNode;
   while(tempNode.getNext()!=null){
    tempNode = tempNode.getNext();
   }
   tempNode.setNext(node);
  }else{
   this.startNode = node;
  }
 }
}



No comments:

Post a Comment