概念

链表是链式存储的线性表,链表的数据以节点来表示,节点由两部分组成,元素和指针,元素是存储数据的存储单元,指针是指向节点的地址数据。

链式存储元素有头插法和尾插法,头插法:以添加的第一个元素作为链表的链尾,链表一直向左延伸,链头一直变化;尾插法:以添加的第一个元素作为链表的链头,链表向右延伸,链尾一直变化。

java示例代码

 1 public class SingleLinkedList<E> implements Serializable {
 2     /**
 3      * 
 4      */
 5     private static final long serialVersionUID = 6450140603802402390L;
 6 
 7     // 头节点
 8     private Node<E> head;
 9     // 尾节点
10     private Node<E> last;
11     // 链表长度
12     private int size;
13 
14     public SingleLinkedList() {
15         this.head = null;
16         this.size = 0;
17     }
18 
19     // 节点信息
20     private static class Node<E> {
21         // 元素
22         private E data;
23         // 前驱
24         private Node<E> pre;
25         // 后驱
26         private Node<E> next;
27 
28         public Node(Node<E> pre, E obj, Node<E> next) {
29             this.pre = pre;
30             this.data = obj;
31             this.next = next;
32         }
33     }
34 
35     /**
36      * 头插法:以第一个元素作为链表的尾部,链表不断向左延伸,链头一直变化
37      * 
38      * @return
39      */
40     public boolean addByHead(E object) {
41         Node<E> h = head;
42         // 每次新节点作为链表的头结点,头结点无前驱
43         Node<E> newNode = new Node<>(null, object, h);
44         // 头部一直在变化
45         head = newNode;
46         if (h == null) {
47             last = newNode;
48         } else {
49             h.pre = newNode;
50         }
51         size++;
52         return true;
53     }
54 
55     /**
56      * 尾插法:以第一个元素作为链头,链尾不断变化,链表不断向右延伸
57      * 
58      * @param object
59      * @return
60      */
61     public boolean addByTail(E object) {
62         Node<E> t = last;
63         // 每次新节点作为链表的尾结点,尾结点无后继
64         Node<E> newNode = new Node<>(t, object, null);
65         last = newNode;
66         // 尾部一直在变化
67         if (t == null) {
68             head = newNode;
69         } else {
70             t.next = newNode;
71         }
72         ;
73         size++;
74         return true;
75     }
76 }

 

posted on 2018-04-09 21:09  柳无情  阅读(126)  评论(0编辑  收藏  举报