FW:Reverse a Singly Linked List Recursively in Java

来源:互联网 发布:灯珠花 淘宝 编辑:程序博客网 时间:2024/04/28 21:02

http://www.technicalypto.com/2010/03/reverse-singly-linked-list-recursively.html

Reverse a Singly Linked List Recursively in Java

 

We have already seen how to reverse a singly linked listwith illustrative pictures. Now lets see how we can do it recursively.In the previous problem we did it iteratively, now we shall do itrecursively.
To attack any problem in a recursive approach, we need to be very clearabout the end/boundary conditions. For a linked list, reverse of a nulllist or reverse of list of size 1 is going to be the same.
Reverse of a linked list of size x will be the reverse of the 'next' element followed by first.
A picture means a thousand words. So, here is what happens internally.

 


Now for the comprehensive Java code (reference for SinglyLinkedList implementation can be found here)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package dsa.linkedlist;
 
public class ReverseLinkedListRecursively {
  
 public static void main(String args[]){
  ReverseLinkedListRecursively reverser = new ReverseLinkedListRecursively();
  SinglyLinkedList<Integer> originalList = reverser.getLabRatList(10);
  System.out.println("Original List : "+originalList.toString());
  originalList.start = reverser.reverse(originalList.start);
  System.out.println("Reversed List : "+originalList.toString());
 }
  
 public Node<Integer> reverse(Node<Integer> list)
 {
     if (list == null || list.next==null) return list;
     Node<Integer> nextItem = list.next;
     list.next = null;
     Node<Integer> reverseRest = reverse(nextItem);
     nextItem.next = list;
     return reverseRest;
 }
 
  
 private SinglyLinkedList<Integer> getLabRatList(int count){
  SinglyLinkedList<Integer> sampleList = new SinglyLinkedList<Integer>();
  for(int i=0;i<count;i++){
   sampleList.add(i);
  }
  return sampleList;
 }
}
/*
 * SAMPLE OUTPUT
 * Original List : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
 * Reversed List : 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
 */


原创粉丝点击