Showing posts with label data structure. Show all posts
Showing posts with label data structure. Show all posts

Sunday, September 13, 2015

Java Function Code to create Reverse Linked List of Singly Linked List (In memory pointer changes)

Here is a sample java Function Code to create Reverse Linked List of Singly Linked List (In memory pointer changes). Approach
  • 1) Maintain a previous node pointer
  • 2) maintain a current node pointer
  • 3) store current-> next in temporary variable
  • 4) replace the current node-> next to previous pointer
  • 5) do step 3 and 4 till you reach current node is your end node
  • 6) at the end update the head->next to null as the old linked list head will be your end node now
  • 7) return previous node as this will be the head of your new linked list.
You can see the image below - before and after structure of linked list: java Function Code to create Reverse Linked List
package com.sample.linkedlist;

public class ReverseLinkedList {

 static class Node {
  int data;
  Node next;

  public Node(int data) {
   this.data = data;
  }

  @Override
  public String toString() {
   return "Node[data=" + data + "]";
  }

 }

 public static Node reverse(Node head) {

  if (head == null)
   return null;

  Node currentNode = head.next;
  Node previousNode = head;
  while (currentNode != null) {
   System.out.println("previous:" + previousNode +" current:"+currentNode);
   
   Node tempCurrent = currentNode.next;

   currentNode.next = previousNode;
   previousNode = currentNode;

   /* move to next node */
   currentNode = tempCurrent;
  }
  head.next = null;

  return previousNode;
 }

 static void print(Node head) {
  while (head != null) {
   System.out.print(head + " ");
   head = head.next;
  }
  System.out.println();

 }

 public static void main(String[] args) {
  
  Node head = new Node(1);
  head.next = new Node(2);
  head.next.next = new Node(3);
  head.next.next.next=new Node(4);
  
  /*print actual linked list*/
  print(head);

  Node newHead = reverse(head);

  /*print reversed linked list*/
  print(newHead);
 }
}

Output
Node[data=1] Node[data=2] Node[data=3] Node[data=4] 
previous:Node[data=1] current:Node[data=2]
previous:Node[data=2] current:Node[data=3]
previous:Node[data=3] current:Node[data=4]
Node[data=4] Node[data=3] Node[data=2] Node[data=1] 


Please share/ask more data structure problems with us. We will try to solve your problem in coming posts. Also share this post with your friends/classmates.