方法1
public class Node {
int data;
Node next = null;
public Node(int data){
this.data = data;
}
public static Node reverseSingleLink(Node head){
Node front = null;
Node succ = null;
Node p = head.next;//不知道是不是如果不带头结点,就是p = head了?还是搞不清楚头结点这个东西。
while(p != null){
succ = p.next;
p.next = front;
front = p;
p = succ;
}
return front;
}
public static void main(String[] args){
Node head = new Node(0);
Node tail = head;
for(int i = 1 ; i < 4; ++i){
Node p = new Node(i);
tail.next = p;
tail = p;
}
head = reverseSingleLink(head);
while(head!= null){
System.out.println(head.data);
head = head.next;
}
}
}
方法3、我还没有看懂。递归方法。
public class List {
Node head;
Node tail;
public void reverse0(List list) {
Node last = reverse(list.head);
list.tail = last;
list.tail.next = null;
}
public Node reverse(Node hd) {
if (hd == null) {
return null;
} else if (hd.next == null) {
head = hd; // the last one becomes the head
} else {
Node node = reverse(hd.next);
node.next = hd;
}
return hd;
}
}
class Node {
int data;
Node next;
public Node(int i) {
data = i;
}
}