head
,请你反转链表,并返回反转后的链表。
Related Topics
结合上一篇LeetCode刷题【剑指 Offer 24】反转链表一起看,是同一个问题,不过这里不用迭代遍历了
class Solution {
ListNode preNode;
ListNode tail;
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null){
return head;
}
preNode = head;
nextNode(head.next);
head.next = null;
return tail;
}
public void nextNode(ListNode node){
if (node == null){
tail = preNode;
return;
}
ListNode next = node.next;
node.next = preNode;
preNode = node;
nextNode(next);
}
}
这是递归的方法,不过本质上还是和遍历迭代是一样的
- 在递归的过程中记录上一个递归到的节点preNode
- 把当前节点的next指向之前记录的preNode
- 把preNode指向当前节点
- 继续处理next节点
- 别忘了头结点的next指向也要清除掉
发表评论