/***************************单链表的反转*********************/
/**
* 单链表反转结题思路:
* 1.定义一个新的头结点
* 2.从头到尾遍历原有的链表,并将遍历出来的元素取出,并放在最前端
* 3.将原有头结点的值替换成新头结点的值
*/
public void reverseList(HeroNode head){
//1.判断当前链表是否为空,或者该链表当前仅有一个节点,我们也不需要反转该链表
if (head.next == null || head.next.next == null){//这里我觉得应该分开验证,不过是或者的关系,就无所谓了
return;
}
//2.定义一个辅助节点,该节点是用来帮助我们遍历当前的链表
HeroNode cur = head.next;
//cur的下一个节点,思考下,这里为什么需要一个cur的下一个节点呢???
/**
* 原因:
* 因为这里我们模拟的是遍历原有链表的每个节点,当遍历第一个节点时,取出来放到新的链表的最前端,每个均是如此的操作,故若取出当前节点后,
* 它的下个节点将无法找到,所以,这里我们要知道他的下个节点
*/
HeroNode next = null;
//用新增节点来讲取出的节点连接、
HeroNode reverse = new HeroNode(0,"","");
//遍历原有的链表并将遍历出来的值放入新的链表的最前端
/**
* 这里的思路:
* 1.先用next保存cur节点的下个节点
* 2.将cur的下个节点取出来放到reserve的最前面,
* 3.然后将cur给到新的链表上
* 4.将保存的下个节点值给到临时变量上,其实也就是将cur后移操作了
*/
while (cur != null){
next = cur.next;//保存当前节点的下一个节点
cur.next = reverse.next;//将cur的下一个节点指向新的链表的最前端。
reverse.next = cur;//将cur连接到新的链表上
cur = next;//cur 实现后移
}
//将head节点指向resverse节点实现单链表的反转
head.next = reverse.next;
}