目录
1. 原理
1.1 问题
1.2 解决
1.3 终点
2.代码操作及讲解
2.1 演示代码
2.2 讲解
1. 原理
反转 A->B->C
1.1 问题
当反转A->B的链接时,当B改成指向A(B->A), 就找不到C了;
1.2 解决
所以需要一个变量临时保存下一个节点C;
利用递归,再找到下一个节点和它之前的节点 重复上述步骤;
记得原来头结点 的指向改为null
1.3 终点
什么时候停?:当当前节点为null,不用再改变节点链接了;
最后记得 把最后的结点当作头结点传出
2.代码操作及讲解
2.1 演示代码
/**
* refactorNode
*/
class LinkNode{
int data;
LinkNode next;
LinkNode(int num){
this.data = num;
}
}
public class refactorNode {
LinkNode reverse(LinkNode head){
LinkNode temp;
LinkNode cur = head;
LinkNode pre = null;
while (cur != null) {
//暂时保存下一个,为后面更新服务
temp = cur.next;
//换指引
cur.next = pre;
//更新 上一个和本个
pre = cur;
cur = temp;
}
return pre;
}
void pirnt_Node(LinkNode head){
System.out.println(head.data);
System.out.println(head.next.data);
System.out.println(head.next.next.data);
}
}
2.2 讲解
1. 创建Node节点 ,其中有一个构造器为数据赋值
2. 通过一个头结点,即可依次找出所有结点即其属性
3. 链表cur和pre分别取其中结点的地址,可直接找到并修改堆内存中的结点