Node类:
public class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
}
}
迭代实现:先将下一节点记录下来,然后让当前节点指向上一节点,再将当前节点记录下来,再让下一节点变为当前节点
public static Node reverseList(Node head) {
if (head == null) {
return null;
}
if (head.next == null) {
return head;
}
Node pre = null;
Node current = head;
Node next = null;
while (current != null) {
next = current.next;
current.next = pre;
pre = current;
current = next;
}
return pre;
}
递归实现:先找到最后一个节点,然后从最后一个开始反转,然后当前节点反转时其后面的节点已经进行反转了,不需要管。最后返回原来的最后一个节点
public Node reverse2(Node node, Node prev) {
if (node == null) {
return null;
}
if (node.next == null) {
node.next = prev;
return node;
} else {
Node re = reverse2(node.next, node);
node.next = prev;
return re;
}
}