前言
個人在最近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;
}