img
    img

    1. //将单链表反转
    2. public static void reversetList(HeroNode head) {
    3. //如果当前链表为空,或者只有一个节点,无需反转,直接返回
    4. if(head.next == null || head.next.next == null) {
    5. return ;
    6. }
    7. //定义一个辅助的指针(变量),帮助我们遍历原来的链表
    8. HeroNode cur = head.next;
    9. HeroNode next = null;// 指向当前节点[cur]的下一个节点
    10. HeroNode reverseHead = new HeroNode(0, "", "");
    11. //遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
    12. //动脑筋
    13. while(cur != null) {
    14. next = cur.next;//先暂时保存当前节点的下一个节点,因为后面需要使用
    15. cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
    16. reverseHead.next = cur; //将cur 连接到新的链表上
    17. cur = next;//让cur后移
    18. }
    19. //将head.next 指向 reverseHead.next , 实现单链表的反转
    20. head.next = reverseHead.next;
    21. }
    1. 原来链表的情况~~
    2. HeroNode [no=1, name=宋江, nickname=及时雨]
    3. HeroNode [no=4, name=林冲, nickname=豹子头]
    4. HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
    5. HeroNode [no=3, name=吴用, nickname=智多星]
    6. 反转单链表~~
    7. HeroNode [no=3, name=吴用, nickname=智多星]
    8. HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
    9. HeroNode [no=4, name=林冲, nickname=豹子头]
    10. HeroNode [no=1, name=宋江, nickname=及时雨]
    11. Process finished with exit code 0