JAVA 中实现用递归实现反转链表

126 阅读1分钟

在Java中,使用递归实现链表反转的过程涉及以下几个步骤:

 1. 定义链表节点的类(如果还没有定义的话)。

 2. 创建一个递归函数,该函数会改变节点的指向。

 3. 在递归函数中,处理当前节点的下一个节点,然后将当前节点的下一个节点设置为递归调用的结果。 

4. 最后,返回新的头节点。

 下面是一个示例代码,展示了如何使用递归实现链表反转:

 ```java 

class ListNode {

 int val; ListNode next;

 ListNode(int x) { val = x; next = null; }

 } 

public class Solution { 

 public ListNode reverseList(ListNode head) {

 if (head == null || head.next == null) { return head; } 

 ListNode p = reverseList(head.next); 

 head.next.next = head; head.next = null; return p;

 }

 public void printList(ListNode node) { while (node != null) { 

 System.out.print(node.val + " "); node = node.next; } System.out.println(); }

 public static void main(String[] args) { 

 Solution solution = new Solution(); ListNode head = new ListNode(1);

head.next = new ListNode(2); head.next.next = new ListNode(3); 

 head.next.next.next = new ListNode(4); 

 System.out.println("Original list:"); 

 solution.printList(head); 

 head = solution.reverseList(head);

System.out.println("Reversed list:"); solution.printList(head); 

 } 

} ``` 在这个示例中,`ListNode` 类定义了链表节点的结构。`Solution` 类中的 `reverseList` 方法是一个递归函数,它接收链表的头节点作为参数,并返回反转后的链表的头节点。`printList` 方法用于打印链表的元素。 在 `main` 方法中,我们创建了一个简单的链表,包含四个节点,然后调用 `reverseList` 方法进行反转,并打印出反转后的链表。 

请注意,递归方法在处理非常长的链表时可能会导致堆栈溢出。在实际应用中,如果链表较长,通常使用迭代方法来实现链表反转,因为迭代方法的空间复杂度为O(1),而递归方法的空间复杂度为O(N)。