单链表反转
一、思路图解
第一步:
1.HeroNode reverse=new HeroNode(0,””,””) ;创建一个新的链表用于暂时存放反转后的节点。
2.HeroNode cur=head.next;定义一个辅助指针,帮助遍历。
3.HeroNode next=null;指向当前节点cur的下一个节点。
第二步:
1.next=cur.next;暂时保存当前节点(cur)的下一个节点。
2.cur.next=reverse.next;看回第一步的reverse后面是空,所以cur.next即1节点.next为空。即有效结点指向临时头结点指向的结点。
3.reverse.next=cur;把reverse和cur两个节点连上。
第三步:
二、代码实现
public static void reverseList(HeroNode head){
// 1. 判断链表是否为空或者只有一个结点
if (head.next == null || head.next.next == null){
return;
}
// 2. 定义一个辅助的指针变量,帮助我们遍历原来的链表
HeroNode cur = head.next;
HeroNode next = null; // 指向当前结点[cur] 的下一个结点
HeroNode reverHead = new HeroNode(0, "", ""); // 用于临时存放反转过程中的链表
while (cur != null){
next = cur.next; // 先把当前结点的下一个结点保存下来
cur.next = reverHead.next; // 接着让当前结点指向临时反转链表的第一个结点
reverHead.next = cur; // 让当前结点作为临时反转链表的第一结点
cur = next; // 移动到原来链表的下一个结点,继续遍历
}
head.next = reverHead.next; // 让原头结点指向反转后的链表
}
参考资料:
1.【十分钟算法-图解】单向链表反转-某讯面试题。
https://www.bilibili.com/video/BV1Ai4y157mn?share_source=copy_web
2. 尚硅谷Java数据结构与java算法(Java数据结构与算法)
https://www.bilibili.com/video/BV1E4411H73v?p=22&share_source=copy_web