1、单链表的反转
public class LinkedListReverseTest {
public static void main(String[] args) {
Node a = new Node("A");
Node b = new Node("B");
Node c = new Node("C");
Node d = new Node("D");
Node e = new Node("E");
Node f = new Node("F");
a.next = b;
b.next = c;
c.next = d;
d.next = e;
e.next = f;
print(a);
}
public static void print(Node node) {
StringBuilder str = new StringBuilder();
while (node.next != null) {
str.append(node.value).append("->");
node = node.next;
if (node.next == null) {
str.append(node.value);
}
}
System.out.println(str);
}
}
class Node {
public String value;
public Node next;
public Node(String value) {
this.value = value;
}
}
1.1、非递归写法
public static Node reverse(Node node){
Node newNode = null;
while(node != null){
Node tmp = node;
node = node.next;
tmp.next = newNode;
newNode = tmp;
}
return newNode;
}
1.2、递归写法
public static Node reverseByRecursion(Node node){
Node newNode = null;
if(node == null || node.next == null){
newNode = node;
}else{
Node temp = reverseByRecursion(node.next);
node.next.next = node;
node.next = null;
newNode = temp;
}
return newNode;
}