1. //从双向链表中删除一个节点
    2. //说明
    3. //1.对于双向链表,我们可以直接找到要删除的这个节点
    4. //2.找到后,自我删除即可
    5. public void delete(int no) {
    6. HeroNode3 temp = head.next;
    7. boolean flag = false;//标志是否找到待删除的节点
    8. //判断是否为空
    9. if (head.next == null) {
    10. System.out.println("链表为空,无法删除~");
    11. return;
    12. }
    13. while (true) {
    14. if (temp == null) {
    15. break;
    16. }
    17. if (temp.no == no) {
    18. flag = true;
    19. break;
    20. }
    21. temp = temp.next;
    22. }
    23. if (flag) {
    24. temp.per.next = temp.next;
    25. //这里的代码有点问题,小bug !
    26. //如果是删除的最后一个节点,就不需要执行下面这句话,否则就会出现空指针异常
    27. // temp.next.per = temp.per;
    28. //改进,加入判断
    29. if (temp.next != null) {
    30. temp.next.per = temp.per;
    31. }
    32. } else {
    33. System.out.printf("没有找到你要删除的%d号英雄\n", no);
    34. }
    35. }