单链表的反转(有难度)

    image.png
    image.png

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