单链表的反转(有难度)
//单链表的反转
public static void reversList(HeroNode2 head){
//如果链表为空,或者链表只有一个节点,无需反转,直接返回
if (head.next == null || head.next.next == null){
return;
}
//定义一个辅助指针(变量),帮助我们遍历原来的链表
HeroNode2 temp = head.next;
HeroNode2 next = null;//指向当前节点[temp]的下一个节点
HeroNode2 reversHead = new HeroNode2(0, "", "");
//遍历原来的链表
//每遍历一个节点,就将其取出,并放在新的链表reversHead的最前端
while (temp != null){
next = temp.next;//先暂时保存当前节点的下一个节点,后面需要使用
temp.next = reversHead.next;//将temp的下一个节点指向新的链表的最前端
reversHead.next = temp;//将temp连接到新的链表上
temp = next;//让temp后移
}
//将head.next 指向reversHead.next ,实现单链表的反转
head.next = reversHead.next;
}