启动

  1. public static void main(String[] args) {
  2. // 测试
  3. System.out.println("双向链表的测试");
  4. // 先创建节点
  5. HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨");
  6. HeroNode2 hero2 = new HeroNode2(2, "卢俊义", "玉麒麟");
  7. HeroNode2 hero3 = new HeroNode2(3, "吴用", "智多星");
  8. HeroNode2 hero4 = new HeroNode2(4, "林冲", "豹子头");
  9. // 创建一个双向链表
  10. DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
  11. doubleLinkedList.add(hero1);
  12. doubleLinkedList.add(hero2);
  13. doubleLinkedList.add(hero3);
  14. doubleLinkedList.add(hero4);
  15. doubleLinkedList.list();
  16. // 修改
  17. HeroNode2 newHeroNode = new HeroNode2(4, "公孙胜", "入云龙");
  18. doubleLinkedList.update(newHeroNode);
  19. System.out.println("修改后的链表情况");
  20. doubleLinkedList.list();
  21. // 删除
  22. doubleLinkedList.del(3);
  23. System.out.println("删除后的链表情况~~");
  24. doubleLinkedList.list();
  25. }

输出

  1. 双向链表的测试
  2. HeroNode [no=1, name=宋江, nickname=及时雨]
  3. HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
  4. HeroNode [no=3, name=吴用, nickname=智多星]
  5. HeroNode [no=4, name=林冲, nickname=豹子头]
  6. 修改后的链表情况
  7. HeroNode [no=1, name=宋江, nickname=及时雨]
  8. HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
  9. HeroNode [no=3, name=吴用, nickname=智多星]
  10. HeroNode [no=4, name=公孙胜, nickname=入云龙]
  11. 删除后的链表情况~~
  12. HeroNode [no=1, name=宋江, nickname=及时雨]
  13. HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
  14. HeroNode [no=4, name=公孙胜, nickname=入云龙]
  15. Process finished with exit code 0

双向链表应用实例

使用带head头的双向链表实现 –水浒英雄排行榜

管理单向链表的缺点分析:

  • 单向链表,查找的方向只能是一个方向,而双向链 表可以向前或者向后查找。
  • 单向链表不能自我删除,需要靠辅助节点 ,而双向 链表,则可以自我删除,所以前面我们单链表删除 时节点,总是找到temp,temp是待删除节点的前一 个节点(认真体会).
  • 示意图帮助理解删除

    课堂作业和思路提示:

    双向链表的第二种添加方式,按照编号顺序 [示意图]
    按照单链表的顺序添加,稍作修改即可.