Created
March 14, 2017 12:29
-
-
Save hrishikesh-mishra/823430d537346f2017e080497d941661 to your computer and use it in GitHub Desktop.
Reverse a singly linked list.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.hrishikesh.ns.list; | |
import java.util.Objects; | |
/** | |
* Problem: | |
* Reverse a singly linked list. | |
* | |
* @author hrishikesh.mishra | |
* @link http://hrishikeshmishra.com/reverse-a-singly-linked-list/ | |
*/ | |
public class ReverseSinglyLinkedList { | |
/** | |
* Reverse list | |
* | |
* @param head | |
* @return | |
*/ | |
public ListNode reverse(ListNode head) { | |
ListNode currentNode = head, previousNode = null, nextNode; | |
while (!Objects.isNull(currentNode)) { | |
nextNode = currentNode.getNext(); | |
currentNode.setNext(previousNode); | |
previousNode = currentNode; | |
currentNode = nextNode; | |
} | |
return previousNode; | |
} | |
/** | |
* Reverse list in recursive. | |
* | |
* @param currentNode | |
* @param newHead | |
*/ | |
public void reverseRecursive(ListNode currentNode, ListNode[] newHead) { | |
ListNode nextNode = currentNode.getNext(); | |
if (Objects.isNull(nextNode)) { | |
newHead[0] = currentNode; | |
return; | |
} | |
reverseRecursive(nextNode, newHead); | |
nextNode.setNext(currentNode); | |
currentNode.setNext(null); | |
} | |
} | |
class ReverseSinglyLinkedListTest { | |
public static void main(String[] args) { | |
ListNode head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4)))); | |
System.out.print("List: "); | |
print(head); | |
ReverseSinglyLinkedList reverseSinglyLinkedList = new ReverseSinglyLinkedList(); | |
head = reverseSinglyLinkedList.reverse(head); | |
System.out.print("\nList after reverse: "); | |
print(head); | |
ListNode[] tempNode = new ListNode[1]; | |
reverseSinglyLinkedList.reverseRecursive(head, tempNode); | |
head = tempNode[0]; | |
System.out.print("\nList after reverse (recursive):"); | |
print(head); | |
} | |
public static void print(ListNode head) { | |
System.out.print("["); | |
while (!Objects.isNull(head)) { | |
System.out.print(head.getData() + ", "); | |
head = head.getNext(); | |
} | |
System.out.print("]"); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment