概念
链表是链式存储的线性表,链表的数据以节点来表示,节点由两部分组成,元素和指针,元素是存储数据的存储单元,指针是指向节点的地址数据。
链式存储元素有头插法和尾插法,头插法:以添加的第一个元素作为链表的链尾,链表一直向左延伸,链头一直变化;尾插法:以添加的第一个元素作为链表的链头,链表向右延伸,链尾一直变化。
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 }