基本思想
定义两个空指针(pre和next),如果头指针指的值不为空,就让next存头节点的下一个节点的值(head.next),再把pre指针的值赋到head.next,再把头节点的值赋到pre,再把next的值赋到head。当head等于空后,把pre指针指的值赋给head,链表就实现反转了
图像解析
如图输入一个1-5的链表
head不等于空进行反转操作
head等于了空,把pre值赋到head,链表完成反转。
代码
/*** 当前节点类,在堆内存当中创建节点*/
public class ListNode {public int value; // 数据域public ListNode next; // 下一个节点的地址域public ListNode(int value){this.value = value;}
}
//链表的管理类
public class LinkList {ListNode head = null;// 写一个方法,创建链表,链表的插入方法// 尾插法public void insert(int value) {ListNode listNode = new ListNode(value);if (head == null){head = listNode;return;}ListNode tempNode = head;while (tempNode.next !=null){tempNode = tempNode.next;}tempNode.next = listNode;}// 输出链表的值public void printLink() {//定义右边指向链表当中的第一个节点ListNode tempNode = head;while (tempNode !=null){System.out.println(tempNode.value);tempNode = tempNode.next;}}//反转链表public void fz() {ListNode pre = null;ListNode next = null;while (head != null) {next = head.next;head.next = pre;pre = head;head = next;}head = pre;}
}
实现
public class Main {public static void main(String[] args) {LinkList linkList = new LinkList();linkList.insert(5);linkList.insert(7);linkList.insert(8);linkList.insert(9);System.out.println("反转之前");linkList.printLink();linkList.fz();System.out.println("反转之后");linkList.printLink();}
}