public class LinkReverseOrder {
public static class Node{
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
public static Node linkListReverse(Node head) {
Node newHead = null;
while(head != null) {//当传入的原始链表节点都为空的时候,也就是新链表的头结点是原始链表的最后一个节点的时候退出循环,返回新链表
Node next = head.next;//备份下一个节点
head.next = newHead;//使原始链表的头结点的下一个节点的指针域指向newHead
newHead = head;//将要逆向的链表的头节点赋予头结点为空的新链表
head = next;//将原链表的下一个节点作为头结点
}
return newHead;//返回转换完毕的链表
}
public static void main(String[] args) {
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
Node head2 = linkListReverse(head);
while(head2 != null) {
System.out.print(head2.value);
head2 = head2.next;
}
System.out.println();
while(head != null) {
System.out.print(head.value);
head = head.next;
}
}
}
}
注:可直接运行,红色注释处为核心思想,有困惑的地方可以留言,一起探讨
大体过程如图示