问题:
给一个单向链表,把它从头到尾反转过来。比如: a -> b -> c ->d 反过来就是 d -> c -> b -> a 。
这里讲解两种方法:
第一种方法就是把每个Node按照顺序存入到一个stack里面,这样,最后面一个就在最上面了。然后,把每一个再取出来,这样顺序就换过来了。
public static Node reverse(Node head) {
Stack<Node> stack = new Stack<Node>();
// put all the nodes into the stack
while (head != null) {
stack.add(head);
head = head.next();
}
//reverse the linked list
Node current = stack.pop();
head = current;
while (stack.empty() != true) {
Node next = stack.pop();
//set the pointer to null, so the last node will not point to the first node.
next.setNext(null);
current.setNext(next);
current = next;
}
return head;
}
第二种方法就是利用两个指针,分别指向前一个节点和当前节点,每次做完当前节点和下一个节点的反转后,把两个节点往下移,直到到达最后节点。
public static Node reverse(Node head) {
Node previous = null;
while (head != null) {
Node nextNode = head.next();
head.setNext(previous);
previous = head;
head = nextNode;
}
return previous;
}