直接上图
循环法:
实现:
/**
* 链表反转
*/
private static void reverseLinked(Node head) {
Node pre = head;
Node current = head.next;
if (current == null) {
return;
}
Node next = current.next;
current.next = pre;
pre.next = null;
while (next != null) {
pre = current;
current = next;
next = current.next;
current.next = pre;
}
}
看着有点累赘,稍微改造一下吧:
/**
* 链表反转
*/
private static void reverse(Node node) {
Node pre = null;
Node next = null;
while (node != null) {
next = node.next;
node.next = pre;
pre = node;
node = next;
}
}
递归法
/**
* 递归方式链表反转
*
* @param node
*/
private static Node DGreverse(Node node) {
if (node == null || node.next == null) {
return node;
}
Node temp = node;
Node newNode = DGreverse(node.next);
temp.next.next = node;
node.next = null;
return newNode;
}