链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。
注意:
里面包含常用的一些操作:
1.头插法
2.尾插法
3.遍历
4.元素的删除
public class LinkedList {//创建结点类,结点脱离类一般无意义,所以设定为静态类static class Node {//数据域int val;//引用后继指针地址Node next;public Node(int val) {this.val = val;}}//定义头节点Node head;public void addFirst(int val) {Node node = new Node(val);if (head == null) {head = node;return ;}node.next = head;head = node;}//尾插法public void addLast(int val) {Node node = new Node(val);if (head == null) {head = node;return ;}//此时要定义一个临时头节点,以便我们找到链表的尾部//并且我们是不希望改动链表的头节点,所以临时结点很重要Node temp = head;while (temp.next != null) {temp = temp.next;}temp.next = node;}//任意位置插入,第一个数据节点为0号下标public boolean addIndex(int index,int val) {if (head == null) {return false;}//判断所给的索引合法性if (index < 0 || index > size()) {throw new RuntimeException("the index is not illegal!");}//第一个位置插入的时候,此时就是头插法if (index == 0) {addFirst(val);return true;}//最后一个位置插入则为尾插法if (index == size()) {addLast(val);return true;}//最后考虑中间位置的插入即可//1.定义临时头结点,先走到待插入位置的前一个位置Node temp = head;while (index > 1) {temp = temp.next;index--;}//2.对元素进行插入Node node = new Node(val);node.next = temp.next;temp.next = node;return true;}//查找是否包含关键字key是否在单链表当中public boolean contains(int key) {if (head == null) {return false;}//只要在链表找到我们就返回false就行Node temp = head;while (temp != null) {if (temp.val == key) {return true;}temp = temp.next;}return false;}//删除第一次出现关键字为key的节点public void remove(int key) {if (head == null) {return ;}//只要存在我们才可以去删除if (!contains(key)) {throw new RuntimeException("the key is not exist !");}//如果是头节点的情况就直接删除if (head.val == key) {head = head.next;return ;}//1.找到第一次出现的关键字key的前一个位置Node temp = head;while (temp != null && temp.next != null) {if (temp.next.val == key) {temp.next = temp.next.next;return;}temp = temp.next;}}//删除所有值为key的节点public void removeAllKey(int key) {if (head == null) {return ;}while (contains(key)) {remove(key);}}//得到单链表的长度public int size() {if (head == null) {return 0;}Node temp = head;int size = 0;while (temp != null) {size++;temp = temp.next;}return size;}public void display() {//遍历链表,这个是一定要掌握的,也不难if (head == null) {return ;}Node temp = head;while (temp != null) {System.out.print(temp.val + " ");temp = temp.next;}}//清空链表public void clear() {//这个我们枪打出头鸟就行head =null;}}