06单链表

Posted linux777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06单链表相关的知识,希望对你有一定的参考价值。

1,链表是以节点的方式来存储的;
2,每个节点包含data域、next域:指向下一个节点;
3,链表的每个节点不一定是连续的;
4,链表分带头节点的链表,和不带头节点的链表,根据实际情况来决定。
 
带头节点的单向链表
 
头节点
1,存放具体数据
2,作用就是作为单链表的头
 
带头节点的单链表
添加(创建)
1,先创建一个头结点
2,添加其他节点,直接加入到链表的最后
  1 package com.datastack.linkedlist;
  2 
  3 public class SimpleLinkedList {
  4     public HeroNode head = new HeroNode(0,"","");//头结点
  5     
  6     /**
  7      * 添加方法:不考虑顺序添加
  8      * 1,找到最后节点
  9      * 2,将最后节点的next指向 新的节点
 10      * @param heroNode
 11      */
 12     public void add(HeroNode heroNode){
 13         HeroNode temp = head;
 14         while(true){
 15             if(temp.next == null){
 16                 break;
 17             }
 18             temp = temp.next;
 19         }
 20         temp.next = heroNode;
 21     }
 22     
 23     /**
 24      * 按编号从小到大顺序添加
 25      * @param heroNode
 26      */
 27     public void addByOrder(HeroNode heroNode){
 28         HeroNode temp = head;
 29         boolean flag = false;//标识添加的编号是否存在
 30         while(true){
 31             if(temp.next == null){
 32                 break;
 33             }
 34             if(temp.next.no > heroNode.no){
 35                 break;
 36             }else if(temp.next.no == heroNode.no){
 37                 flag = true;
 38                 break;
 39             }
 40             temp = temp.next;
 41         }
 42         if(flag){
 43             System.out.printf("准备插入的英雄的编号 %d 已存在,不能添加
",heroNode.no);
 44         }else{
 45             heroNode.next = temp.next;
 46             temp.next = heroNode;
 47         }
 48         
 49     }
 50 
 51     /**
 52      * 显示链表
 53      */
 54     public void list(){
 55         //判断链表是否为空
 56         if(head.next == null){
 57             System.out.println("链表为空");
 58             return;
 59         }
 60         HeroNode temp = head.next;
 61         while(true){
 62             if(temp == null){
 63                 break;
 64             }
 65             System.out.println(temp);
 66             temp = temp.next;
 67         }
 68     }
 69     
 70     /**
 71      * 修改
 72      * @param heroNode
 73      */
 74     public void update(HeroNode heroNode){
 75         HeroNode temp = head.next;
 76         boolean flag = false;//表示是否找到该节点
 77         while(true){
 78             if(temp == null){
 79                 break;
 80             }
 81             if(temp.no == heroNode.no){
 82                 flag = true;
 83                 break;
 84             }
 85             temp  = temp.next;
 86         }
 87         if(flag){
 88             temp.name = heroNode.name;
 89             temp.nickname = heroNode.nickname;
 90         }else{
 91             System.out.println("没有找到要修改的编号");
 92         }
 93     }
 94     
 95     /**
 96      * 删除
 97      * @param heroNode
 98      */
 99     public void delete(int no){
100         HeroNode temp = head;
101         boolean flag = false;//是否找到要删除的节点
102         while(true){
103             if(temp.next == null){
104                 break;
105             }
106             if(temp.next.no == no){
107                 flag = true;
108                 break;
109             }
110             temp = temp.next;
111         }
112         if(flag){
113             temp.next = temp.next.next;
114         }else{
115             System.out.println("没有找到要删除的节点");
116         }
117         
118     }
119 }
 1 package com.datastack.linkedlist;
 2 
 3 public class HeroNode {
 4     public int no;
 5     public String name;
 6     public String nickname;//昵称
 7     public HeroNode next;//下一个节点
 8     
 9     //构造器
10     public HeroNode(int no,String name,String nickname){
11         this.no = no;
12         this.name = name;
13         this.nickname = nickname;
14     }
15     
16     //打印
17     public String toString(){
18         return "HeroNode [no="+no+",name="+name+",nickname="+nickname+"]";
19     }
20     
21 }
 1 package com.datastack.linkedlist;
 2 
 3 public class SimpleLinkedListDemo {
 4     public static void main(String[] args) {
 5         HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
 6         HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
 7         HeroNode hero2 = new HeroNode(2, "卢俊义", "王麒麟");
 8         HeroNode hero4 = new HeroNode(4, "林冲", "爆炸头");
 9         
10         SimpleLinkedList linkedList = new SimpleLinkedList();
11         linkedList.addByOrder(hero1);
12         linkedList.addByOrder(hero4);
13         linkedList.addByOrder(hero2);
14         linkedList.addByOrder(hero3);
15         
16         linkedList.list();
17         
18         HeroNode heroNode = new HeroNode(2, "wuyong", "wy");
19         linkedList.update(heroNode);
20         System.out.println("修改后");
21         linkedList.list();
22         System.out.println("删除后");
23         linkedList.delete(1);
24         linkedList.list();
25         System.out.println("删除后");
26         linkedList.delete(4);
27         linkedList.list();
28     }
29 }

 

以上是关于06单链表的主要内容,如果未能解决你的问题,请参考以下文章

如何将值插入单链表

18.06.03 POJ 4126:DNA 15年程设期末05(状压DP)

实现单链表的各种基本运算

我需要删除单链表中动态分配的对象吗?

单链表按顺序插入和删除值

数据结构单链表的增删查改,附代码+笔记gitee自取