FW:Reverse a Singly Linked List Recursively in Java

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 list with illustrative pictures. Now lets see how we can do it recursively. In the previous problem we did it iteratively, now we shall do it recursively.
To attack any problem in a recursive approach, we need to be very clear about the end/boundary conditions. For a linked list, reverse of a null list 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
  */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值