单链表的翻转,意思就是在保持头节点(如果有头节点)的情况下,把节点1,2,3的顺序变成3,2,1的顺序,示意图如下:
要实现单链表的翻转,就得另外需要一个新的单链表,先把节点数据翻转,存放到新的头节点后面,最后再把新的头节点赋值给原来的头节点,那么就可以把原来的头节点和翻转后的节点连接起来,从而实现单链表的翻转,示意图如下:
思路:
1、先定义一个新的链表
2、从头到尾遍历一遍原来的链表,每遍历 一个节点,就将其取出,并放在新的链表的的最前端
3、再把新的链表的头节点,赋值给原来的链表的头节点
实现代码如下:
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,"",""); //定义翻转链表的头节点
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseList的最前端
while (cur != null) {
next = cur.next; //先暂时保存当前节点的下一个节点,后面需要使用
cur.next = reverseHead.next; //将cur的下一个节点指向新的链表的最前端
reverseHead.next = cur; //将cur连接到新的链表上
cur = next;
}
//将head.next指向reverseHead.next,实现单链表的反转
head.next = reverseHead.next;
}