🔒文章目录:
1.❤️❤️前言~🥳🎉🎉🎉

2.ArrayList的缺陷
3.链表的概念及结构

注意:
1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续
2.其结点一般都是从堆上申请出来的
3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续
4.无头单向非循环链表的实现
4.1成员属性
public class SingleLinkedList {
    static  class  ListNode{
      public   int value;
      public   ListNode next;
        public ListNode(int value) {
            this.value = value;
        }
    }
   public ListNode head;
4.2成员方法
createList
display——打印链表
addFirst——头插
addLast——尾插
size——获取单链表长度
addIndex——在任意位置插入
contains——判定是否包含某个元素
remove——删除第一次出现关键字为key的结点
removeAll——删除所有值为key的结点
clear——清空单链表
4.3完整代码及使用
完整代码
public class SingleLinkedList {
    static  class  ListNode{
      public   int value;
      public   ListNode next;
        public ListNode(int value) {
            this.value = value;
        }
    }
   public ListNode head;
    public void createList(){
        ListNode listNode1 = new ListNode(45);
        ListNode listNode2 = new ListNode(46);
        ListNode listNode3 = new ListNode(50);
        ListNode listNode4 = new ListNode(56);
        ListNode listNode5 = new ListNode(67);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;
        listNode4.next=listNode5;
        head=listNode1;
    }
  public void display(){
    ListNode cur=head;
    while(cur!=null){
        System.out.print(cur.value+" ");
        cur=cur.next;
    }
      System.out.println();
 }
public int size(){
        int count=0;
        ListNode cur=head;
        while(cur!=null){
         cur=cur.next;
         count++;
        }
        return count;
    }
public void  contain(int key){
        ListNode cur=head;
        while(cur!=null){
            if(cur.value==key){
                System.out.println(true);
                return;
            }
            cur=cur.next;
        }
    System.out.println(false);
}
  
    public void  addFirst(int a){
    ListNode listNode = new ListNode(a);
    listNode.next=head;
    head=listNode;
}
public void  addLast(int a){
    ListNode listNode = new ListNode(a);
    ListNode cur=head;
   if(head==null){
       head=listNode;
       return;
}
    while(cur.next!=null){
       cur=cur.next;
    }
    cur.next=listNode;
}
public void addIndex(int index,int a){
        if(head==null){
            ListNode listNode = new ListNode(a);
            head=listNode;
            return;
        }
        if(index<0||index>size()){
            System.out.println("位置不合法");
            //这里就不搞抛出异常了,我们简单点
            return;
        }
        if(index==0){
            addFirst(a);
            return;
        }
        if(index==size()){
            addLast(a);
            return;
        }
    ListNode listNode = new ListNode(a);
    ListNode cur=head;
    for (int i = 0; i <index-1 ; i++) {
          cur=cur.next;
    }
     listNode.next=cur.next;
     cur.next=listNode;
}
public void remove(int key){
        ListNode cur=head;
        if(head==null) {
            System.out.println("为空链表,不能进行删除操作");
            return;
        }
        if(cur.value==key) {
            head=head.next;
            return;
        }
        while(cur.next!=null){
            if(cur.next.value==key){
             cur.next=cur.next.next;
             return;
            }
           cur=cur.next;
        }
        System.out.println("不存在该数");
}
    public void removeAll(int key){
        if(this.head == null) {
            System.out.println("为空链表,不能进行删除操作");
            return;
        }
        ListNode cur = head;
        while(cur.next != null){
            if(cur.next.value == key){
                cur.next=cur.next.next;
            }
            else {
                cur = cur.next;
            }}
        if(head.value==key){
            head = head.next;
                }
            }
       public void clear(){
           head=null;
           }
    }完整代码的使用
public class Test {
    public static void main(String[] args) {
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.createList();
        singleLinkedList.display();
        System.out.println(singleLinkedList.size());
        singleLinkedList.contain(45);
        singleLinkedList.addFirst(12);
        singleLinkedList.addLast(67);
        singleLinkedList.addIndex(3, 22);
        singleLinkedList.display();
        singleLinkedList.remove(22);
        singleLinkedList.remove(12);
        singleLinkedList.display();
        singleLinkedList.removeAll(67);
        singleLinkedList.display();
        System.out.println("=======================");
        singleLinkedList.clear();//清空该链表
        singleLinkedList.display();
        System.out.println("已清空该链表");
        System.out.println("=======================");
    }}
5.总结











