好难 终于想明白了
最开始是头结点指1,1指2,2指3,3指4
现在新创建了一个反转链表reverse用于存放数据
先让当前节点的next指向reverse的next,
第一步就是结点1原本指向节点2,现在指向null
第二步让reverse的next指向当前节点
现在是reverse的next指向了节点1,节点1指向空
再往后走
让当前节点(节点2)的next指向reverse的next
因为reverse的next不指向空了,指向节点1,现在构成了:节点2的next指向了节点1
现在是节点1指向空,节点2指向节点1,反转成功了,但是现在的reverse的next也指向节点1,要让reverse的next指向现在的头结点,节点2
最后让head头结点指向reverse的next就可以了
想了一个小时
//单链表反转
public static void reverseList(heroNode head){
if (head.next == null || head.next.next == null){
return;
}
//定义辅助指针帮助我们遍历原来的链表
heroNode cur = head.next;
heroNode next = null;//指向cur节点的下一个节点
//创建一个新的链表用于反转
heroNode reverseHead = new heroNode(0,"","");
//遍历原来的链表,每遍历一个节点,就将其取出,放到reverseHead的最前端
while (cur != null){
next = cur.next;
cur.next = reverseHead.next;
reverseHead.next = cur;
cur = next;
}
//将head.next指向reverseHead.next,实现链表的反转
head.next = reverseHead.next;
}