链表反转是链表基础操作之一,其中重点在于节点断开对下一节点引用前用一个中间变量保存对下一节点的引用
现有如下链表
具体步骤如下
创建一个节点变量 temp 保存第三个节点的引用
.断开第二个节点对第三个节点的引用
使第二个节点指针指向第一个节点
把 temp 指针指向第二个节点,由于这一步 temp 是第三个节点的引用,所以相当于把第三个节点指针指向第二个节点
之后把 temp 指针下移一位,指向第四节点,重复第 2 到第 5 步直至到链表末尾
循环完成了把 head 引用变为null
具体代码实现
/**
* 链表反转
*
* @param head
* @return 新的头节点
*/
static LinearList reversal(LinearList head){
/*
upper:上一节点
current: 当前节点
temp: 临时节点
*/
LinearList temp,upper,current;
//保存上一节点引用
upper = head;
//保存当前节点引用
current = head.nextNode;
//遍历链表
while(current != null){
//保存当前节点的对下一节点的引用
temp = current.nextNode;
//把当前节点指向上一节点,完成当前节点指针反转
current.nextNode = upper;
//遍历指针下移一位
upper = current;
current = temp;
}
//设置头节点指针为空
head.nextNode = null;
//返回新的头节点
return upper;
}