public class LinklistReverse { //定义类节点类 封装节点信息 static class Node { private int value; private Node next; public Node(int value) { this.value = value; this.next = null; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } } public static Node reverse3(Node head) { //当前节点 1 Node cur = head; //当前节点的下一个节点 2 Node post = head.next; //将当前节点的指向设置为空 1->null head.next = null; while (post != null) { //将下一个节点的值 给一个临时变量 2=tmp Node tmp = post; //将下一个的下一个值给 下个值 3->2 post = post.next; //临时节点的再赋值 将1 赋给他的next节点 1=tmp.next tmp.next = cur; //tmp现在是 2->1 cur = tmp; } return cur; } //1->2->3->4->5 1<-2<-3<-4<-5 public static Node reverse(Node node) { // //如果进来的节点是第一个或者最后一个 // Node current=node; // Node next=node.getNext(); // while (next!=null){ // Node tmp=next; // next=next.getNext(); // tmp // } // } return null; } // public void reverse4(Node node) { // ///记录current的节点是head大的下一个节点。 // Entry<T> current = head.next; // // //切断head.next指向current,(当前的head变为链表的尾,所以next为空) // head.next = null; // while(current != null) { // //记录currentNext的节点是currentNext大的下一个节点。 // Entry<T> currentNext = current.next; // //current.next反方向指向以前的节点 // current.next = head; // //移动head和current指针,到后面head重新成为头节点 // head = current; // current = currentNext; // } // } public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); head.setNext(node1); node1.setNext(node2); node2.setNext(node3); Node h = head; while (h != null) { System.out.println(h.getValue() + " "); h = h.getNext(); } head= reverse3(head); System.out.println("==========="); while (head != null) { System.out.println(head.getValue() + " "); head = head.getNext(); } } }