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大的下一个节点。// Entrycurrent = head.next;//// //切断head.next指向current,(当前的head变为链表的尾,所以next为空)// head.next = null;// while(current != null) {// //记录currentNext的节点是currentNext大的下一个节点。// Entry 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(); } }}