定義一個單向鏈表
public class Node{
int index;
Node next;
public Node(int index, Node next) {
this.index = index;
this.next = next;
}
public Node(int index) {
this.index = index;
}
@Override
public String toString() {
return "Node{" +
"index=" + index +
", next=" + next +
'}';
}
}
鏈表翻轉
public class Test{
public static Node conver(Node node){
Node pre = null;
Node next = null;
while (node != null) {
next = node.next;
node.next = pre;
pre = node;
node = next;
}
return pre;
}
public static void main(String[] args) {
Node node4 = new Node(4);
Node node3 = new Node(3,node4);
Node node2 = new Node(2,node3);
Node node1 = new Node(1,node2);
System.out.println(node1);
System.out.println(node2);
System.out.println(node3);
System.out.println(node4);
conver(node1);
System.out.println(node1);
System.out.println(node2);
System.out.println(node3);
System.out.println(node4);
}
}
結果
遞歸翻轉
public Node reverse2(Node node, Node prev) {
if (node.next == null) {
node.next = prev;
return node;
} else {
Node re = reverse2(node.next, node);
node.next = prev;
return re;
}
}
public Node reverse(Node node) {
Node prev = null;
Node now = node;
while (now != null) {
Node next = now.next;
now.next = prev;
prev = now;
now = next;
}
return prev;
}