前言
个人在最近2年一直担任一面面试官,平时长问的题目就是单链表的翻转。发现很多面试同学只知道非递归实现,提到递归实现都是一脸懵逼。这里普及一下具体实现方案。
链表数据结构
我们这里就定义一个最简单的单链表:
class Node {
Node next;
int val;
}
非递归
public static Node reverseNode(Node head) {
if (head == null || head.next == null) {
return head;
}
Node preNode, lastNode;
while (head != null) {
lastNode = head.next;
head.next = preNode;
head = lastNode;
}
return preNode;
}
递归
public static Node reverseNode(Node node) {
if (node == null || node.next == null) {
return node;
}
Node lastNode = node.next;
node.next = null;
lastNode = reverseNode(lastNode);
lastNode.next = node;
return node;
}