单链表翻转(递归)
首先要明确递归的作用是在方法中掉用方法。
其实递归反转链表就是针对单个节点去进行反转,反转当前节点之前先反转后续节点。这样从头结点开始,直到尾结点才开始反转指针的指向。简单的说就是从尾结点开始,逆向反转各个结点的指针指向。
上代码:
//递归法反转单链表
public void reverse() {
//判断当前链表是否为空
if(isEmpty()) {
return;
}
//不是空就从第一个开始反转
reverse(head.next);
}
//反转单个节点
public Node reverse(Node curr) {
//递归的结束条件
if(curr.next==null) {
head.next =curr;
return curr;
}
//递归的反转当前节点的下一个节点。 返回值是链表反转后当前节点的上一个节点
Node pre =reverse(curr.next );
pre.next=curr;
//把当前节点的下一个节点设为null
curr.next=null;
return curr;
}
代码其实很简单,只是需要耗费时间去理解这个递归调用的逻辑。