定义两个空指针(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();
}
}
结果



