线性表的链式存储结构(Java代码实现)

附上上一节的Java代码

  1 package LinkListDemo2;
  2 
  3 public class LinkList {
  4 
  5     int data;
  6     LinkList next;
  7 
  8     /**
  9      * 链表的初始化
 10      */
 11     public void InitLink(LinkList L) {
 12         L = new LinkList();
 13         L.next = null;
 14     }
 15 
 16     /**
 17      * 链表的创建(头插法),n插入的元素个数
 18      */
 19     public void CreatListHead(LinkList L, int n) {
 20         InitLink(L);
 21         for (int i = 0; i < n; i++) {
 22             LinkList linkList = new LinkList();
 23             linkList.data = i;
 24             linkList.next = L.next;
 25             L.next = linkList;
 26         }
 27     }
 28 
 29     /**
 30      * 链表的创建(尾插法),n插入的元素个数
 31      */
 32     public void CreatListTail(LinkList L, int n) {
 33         InitLink(L);
 34         LinkList P;
 35         P = L;
 36         for (int i = 0; i < n; i++) {
 37             LinkList linkList = new LinkList();
 38             linkList.data = i;
 39             P.next = linkList; // 注意:等号两个不能互调位置
 40             P = linkList; // P移动到新的节点位置
 41         }
 42         P.next = null;
 43     }
 44 
 45     /**
 46      * 获取链表的长度
 47      */
 48     public int GetLengthList(LinkList L) {
 49         int count = 0;
 50         LinkList P;
 51         P = L.next;
 52         while (P != null) {
 53             P = P.next;
 54             count++;
 55         }
 56         return count;
 57     }
 58 
 59     /**
 60      * 链表的插入 ,n表示插入的位置
 61      */
 62     public void InsertList(LinkList L, int n, int num) {
 63         int count = 0;
 64         LinkList p, s;
 65         p = L;
 66         count = 1;
 67         while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
 68             p = p.next;
 69             count++;
 70         }
 71         if (p == null || count > n) {
 72             System.out.println("不能插入!!");
 73         }
 74         s = new LinkList();
 75         s.data = num;
 76         s.next = p.next;
 77         p.next = s;
 78     }
 79 
 80     /**
 81      * 链表的删除 ,n表示插入的位置
 82      */
 83     public void DeleteListElem(LinkList L, int n) {
 84         int count = 0;
 85         LinkList p;
 86         p = L;
 87         count = 1;
 88         while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
 89             p = p.next;
 90             count++;
 91         }
 92         if (p == null || count > n) {
 93             System.out.println("非法删除元素!!");
 94         }
 95         p.next = p.next.next; // Java有着高尚的情操 gc(垃圾回收机制),所以不能内存释放
 96     }
 97 
 98     /**
 99      * 清空链表
100      */
101     public void ClearList(LinkList L) {
102         LinkList p, q;
103         p = L.next;
104         while (p != null) {
105             q = p.next; // 调换
106             p = null; // 清空
107             p = q; // 重新给p赋值,相当于p移动到下一位
108         }
109         L.next = null; // 头节点重新指向空
110     }
111 
112     /**
113      * 前提条件:这个数存在 查找特定的元素 ,查找第四个位置的值,并返回
114      */
115     public int GetElem(LinkList L, int n) {
116         LinkList p;
117         p = L.next;
118         int count = 1;
119         while (p != null) {
120             if (count == n)
121                 return p.data;
122             ++count;
123             p = p.next;
124         }
125         return 0;
126     }
127 
128     /**
129      * 判断链表是否为空
130      */
131     public boolean ElemptyList(LinkList L) {
132 
133         if (L.next != null)
134             return false;
135         else
136             return true;
137     }
138 
139     /**
140      * 遍历链表
141      */
142     void Traverse(LinkList L) {
143         LinkList linkList;
144         linkList = L.next;
145         while (linkList != null) {
146             System.out.print(linkList.data + " ");
147             linkList = linkList.next;
148         }
149     }
150 
151 }

测试类

 1 package LinkListDemo2;
 2 
 3 public class test {
 4 
 5     public static void main(String[] args) {
 6         LinkList linkList = new LinkList();
 7         linkList.CreatListHead(linkList, 5);
 8         System.out.println("头插法--------------");
 9         linkList.Traverse(linkList);
10         System.out.println("");
11 
12         System.out.println("尾插法--------------");
13         LinkList linkList2 = new LinkList();
14         linkList2.CreatListTail(linkList2, 5);
15         linkList.Traverse(linkList2);
16         System.out.println("");
17 
18         System.out.println("链表2长度:--------------");
19         System.out.println(linkList2.GetLengthList(linkList2));
20 
21         System.out.println("在链表2的3位置上插入100:--------------");
22         linkList2.InsertList(linkList2, 3, 100);
23         linkList.Traverse(linkList2);
24         System.out.println("");
25 
26         System.out.println("删除链表1号元素:--------------");
27         linkList.DeleteListElem(linkList, 1);
28         linkList.Traverse(linkList);
29         System.out.println("");
30 
31         System.out.println("判断链表2是否为空:--------------");
32         System.out.println(linkList2.ElemptyList(linkList2));
33         System.out.println("清空链表2:--------------");
34         linkList2.ClearList(linkList2);
35 
36         System.out.println("判断链表2是否为空:--------------");
37         System.out.println(linkList2.ElemptyList(linkList2));
38 
39         System.out.println("查找链表1的3位置的值:--------------");
40         System.out.println(linkList.GetElem(linkList, 2));
41     }
42 
43 }

截图:

完毕 - -

猜你喜欢

转载自www.cnblogs.com/liuzeyu12a/p/10301406.html