反转链表:递归实现
Java
解题思路
反转链表,类似其他链表的处理过程,我们可以假设函数已经处理好之后的链表了,我们只要处理头结点跟之后链表的关系。头节点的next节点即处理好之后的新链表的尾节点,此时新链表尾节点指向必定为null,需要更改为指向当前的头节点才能完成整个链表的反转,最后再按惯例,把头节点也就是新链表的尾节点的next指向空,这样就完成了整个链表的反转。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 传入空链表处理
if(head == null){
return null;
}
// 处理到结尾了,返回整个链表
if(head.next == null){
return head;
}
// 获取之后处理好的链表
ListNode rev = recursive(head.next);
// 处理好的链表的尾结点的next指向head
head.next.next = head;
// head也反转到null
head.next = null;
// 返回新链表的头节点
return rev;
}
}