单向链表,每次添加,向链表尾追加元素。第一个节点为head节点,每次添加的时候,找到最后一个节点,将最后一个节点的next指向新添加的元素。
先拿到head节点,每次只需要通过next,就能找到下一个节点
public class SingleLinkedList<E> { // 头结点 Node head; // 最后一个节点 Node last; public void add(E e) { Node node = new Node(null, e, null); // 头结点为空,说明还没有添加过元素 if (head == null) { head = node; } else { // 最后一个节点的next指向新节点 last.next = node; } // 新节点变为last last = node; } private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } } } class Demo1 { public static void main(String[] args) { SingleLinkedList<String> list = new SingleLinkedList<>(); list.add("A"); list.add("B"); list.add("C"); System.out.println(); } }
单向链表,添加元素后,数据结构如下:
双向链表,添加元素的时候,向末尾追加。保证前一个元素的next指向下一个元素,下一个元素的pre指向上一个元素。first记录一个元素,last记录最后一个元素。
public class DoubleLinkedList<E> { Node first; Node last; public void add(E e) { Node node = new Node(null, e, null); // 头结点为空,说明还没有添加过元素 if (first == null) { first = node; } else { node.prev = last; // 最后一个节点的next指向新节点 last.next = node; } // 新节点变为last last = node; } private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } } } class Demo2 { public static void main(String[] args) { DoubleLinkedList<String> list = new DoubleLinkedList<>(); list.add("A"); list.add("B"); list.add("C"); System.out.println(); } }
双向链表,添加元素后,数据结构如下: