概念
链表是链式存储的线性表,链表的数据以节点来表示,节点由两部分组成,元素和指针,元素是存储数据的存储单元,指针是指向节点的地址数据。
链式存储元素有头插法和尾插法,头插法:以添加的第一个元素作为链表的链尾,链表一直向左延伸,链头一直变化;尾插法:以添加的第一个元素作为链表的链头,链表向右延伸,链尾一直变化。
java示例代码
1 public class SingleLinkedListimplements Serializable { 2 /** 3 * 4 */ 5 private static final long serialVersionUID = 6450140603802402390L; 6 7 // 头节点 8 private Node head; 9 // 尾节点10 private Node 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 {21 // 元素22 private E data;23 // 前驱24 private Node pre;25 // 后驱26 private Node next;27 28 public Node(Node pre, E obj, Node next) {29 this.pre = pre;30 this.data = obj;31 this.next = next;32 }33 }34 35 /**36 * 头插法:以第一个元素作为链表的尾部,链表不断向左延伸,链头一直变化37 * 38 * @return39 */40 public boolean addByHead(E object) {41 Node h = head;42 // 每次新节点作为链表的头结点,头结点无前驱43 Node 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 object59 * @return60 */61 public boolean addByTail(E object) {62 Node t = last;63 // 每次新节点作为链表的尾结点,尾结点无后继64 Node 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 }