- 单链表的反转【腾讯面试题,有点难度】
// 【王】 比视频方法少新建一个变量。
public static void reversedList(HeroNode head) {
// 如果当前链表为空,或者只有一个节点,无需反转,直接返回。
if (head.next == null || head.next.next == null) {
return;
}
// 定义一个辅助的指针(变量),帮助我们遍历原来的链表。
HeroNode cur = head.next;
HeroNode reverseHead = new HeroNode(0, "", "");
while (true) {
if (cur == null) {
break;
}
cur = cur.next; // 先将cur后移到下一个节点。
head.next.next = reverseHead.next; // 将当前节点指向新的链表的最前端。
reverseHead.next = head.next; // 将当前节点连接到新的链表上。
head.next = cur; // 让head指向cur,即原链表的下一个节点。
}
// 将 head.next 指向 reverseHead.next ,实现单链表的反转。
head.next = reverseHead.next;
}