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
*/
|
本文介绍了一种使用递归方法来反转单链表的方法。通过详细的步骤解析和Java代码实现,展示了如何处理边界条件,并提供了完整的代码示例。
255

被折叠的 条评论
为什么被折叠?



