问题
题意:反转一个单链表。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
注意: 不要使用额外链表
解决
反转链表,只需要转变方向即可,由于需要从head节点开始遍历
那么需要一个currentNode 指向当前节点,tempHeadNode 指向临时头节点,virtualNode 指向 当前节点的需要指向的下一节点(或者说前节点)
private static void reverseLinkedList(Node<Integer> headNode) {
Node<Integer> currentNode;
Node<Integer> currentHeadNode;
Node<Integer> virtualNode;
// 设置虚拟节点,作为当前节点的前节点
virtualNode = new Node<>();
virtualNode.setValue(-1);
virtualNode.setNext(null);
currentNode = headNode;
while (currentNode != null){
// 暂时保存当前Node的下一节点为Head
currentHeadNode = currentNode.getNext();
// 将当前节点的下一节点,设置为virtualNode , 实现反转节点
currentNode.setNext(virtualNode);
// currentNode,virtualNode 下移一位
virtualNode = currentNode;
currentNode = currentHeadNode;
}
}
static class Node<T>{
private T value;
private Node<T> next;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
", next=" + next +
'}';
}
}