Java_简单实现无头单向非循环链表_简单实现LinkedList

文章目录

  • 一、ArrayList的优缺点
  • 二、链表
    • 1.链表的概念及结构
    • 2.链表的分类
      • 1、单向或者双向
      • 2、带头或者不带头
      • 3、循环或者非循环
  • 三、实现无头单向非循环链表
    • 1.定义接口
    • 2.定义MySingleList
    • 3.成员
      • 1、节点类(定义在MySingList类里)
      • 2、头节点引用
    • 4.打印链表实现dispaly(这是方便测试写的)
    • 5.得到单链表的长度 size
    • 6.查找是否包含关键字key是否在单链表当中 contions
    • 7.头插法 addFirst
    • 8.尾插法 addLast
    • 9、任意位置插入,第一个数据节点为0号下标 addIndex
    • 10、删除第一次出现关键字为key的节点 remove
    • 11.删除所有值为key的节点 removeAllKey
    • 12.删除所有值为key的节点 clear
  • 四、练习
    • 1.移除链表元素
    • 2.反转链表
    • 3.链表的中间节点
    • 4.链表中倒数第k个节点
    • 5.合并两个有序链表
    • 6.链表分割
    • 7.链表回文结构
    • 8.相交链表
    • 9.环形链表
    • 10.环形链表2
  • 五、 模拟实现LinkedList
    • 1.定义接口
    • 2.定义MyLinkedList
    • 3.成员
      • 1、节点类
      • 2、头引用和尾引用
    • 4.打印链表 display
    • 5.查找是否包含关键字key是否在单链表当中 contions
    • 6.头插法 addFirst
    • 7.尾插法 addLast
    • 8.任意位置插入,第一个数据节点为0号下标 addIndex
    • 9.得到单链表的长度 size
    • 10.删除第一次出现关键字为key的节点 remove
    • 11.删除所有值为key的节点 removeAllKey
    • 12.清空 clear
  • 六、LinkedList
    • 1.遍历
    • 2.ArrayList和LinkedList的区别?


一、ArrayList的优缺点

缺点:
1.插入数据必须移动其他数据,最坏情况下,就是插入到0位置。时间复杂度O(N)
2.删除数据也需要移动数据,最坏情况下,就是删除0位置。时间复杂度O(N)
3.扩容之后,有可能会浪费空间
优点:
1.在给定下标进行查找的时候,时间复杂度O(1)
总结:顺序表比较适合进行给定下标查找的场景

二、链表

1.链表的概念及结构

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。就像火车一样是一节一节的。
在这里插入图片描述
火车之间用挂钩相连,每个节点都存储下一个节点的物理地址。

在这里插入图片描述

2.链表的分类

1、单向或者双向

在这里插入图片描述

2、带头或者不带头

在这里插入图片描述

3、循环或者非循环

在这里插入图片描述
无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表

三、实现无头单向非循环链表

1.定义接口

public interface IList {
    //头插法
    public void addFirst(int data);
    //尾插法
    public void addLast(int data);
    //任意位置插入,第一个数据节点为0号下标
    public void addIndex(int index,int data);
    //查找是否包含关键字key是否在单链表当中
    public boolean contains(int key);
    //删除第一次出现关键字为key的节点
    public void remove(int key);
    //删除所有值为key的节点
    public void removeAllKey(int key);
    //得到单链表的长度
    public int size();
    public void clear();
    public void display();
}

2.定义MySingleList

public class MySingleList implements IList{
    @Override
    public void addFirst(int data) {
        
    }

    @Override
    public void addLast(int data) {

    }

    @Override
    public void addIndex(int index, int data) {

    }

    @Override
    public boolean contains(int key) {
        return false;
    }

    @Override
    public void remove(int key) {

    }

    @Override
    public void removeAllKey(int key) {

    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public void clear() {

    }

    @Override
    public void display() {

    }
}

3.成员

1、节点类(定义在MySingList类里)

节点类包含存储数据和下一个节点引用。

   static class ListNode{
        public int val;
        public ListNode next;
        public ListNode(int val)
        {
            this.val = val;
        }
    }

2、头节点引用

 public ListNode head;

4.打印链表实现dispaly(这是方便测试写的)

  @Override
    public void display() {
        ListNode cur = this.head;
        while(cur!=null)
        {
            System.out.print(cur.val+" ");
            cur =cur.next;
        }
        System.out.print("\n");
    }

5.得到单链表的长度 size

    @Override
    public int size() {
        ListNode cur= head;
        int ret = 0;
        while(cur!=null)
        {
            ret++;
            cur = cur.next;
        }
        return ret;
    }

6.查找是否包含关键字key是否在单链表当中 contions

    @Override
    public boolean contains(int key) {
        ListNode cur= head;
        while(cur!=null)
        {
            if(key==cur.val)
            {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

7.头插法 addFirst

    @Override
    public void addFirst(int data) {
        ListNode newhead = new ListNode(data);
        newhead.next = head;
        head = newhead;
    }

8.尾插法 addLast

    @Override
    public void addLast(int data) {
        ListNode node= new ListNode(data);
        if(head==null)
        {
            head = node;
        }
        else {
            //找尾
            ListNode cur = head;
            while(cur.next!=null)
            {
                cur = cur.next;
            }
            cur.next = node;
        }
    }

9、任意位置插入,第一个数据节点为0号下标 addIndex

    private  ListNode searchPrev(int index)
    {
        ListNode cur = head;
        int count = index-1;
        while(count--!=0)
        {
            cur = cur.next;
        }
        return cur;
    }
    @Override
    public void addIndex(int index, int data) {
        if(index<0||index>size())
        {
            return;
        }
        ListNode temp = new ListNode(data);
        if(index==0)
        {
            temp.next= head;
            head=temp;
        }
        else
        {
            ListNode cur= searchPrev(index);
            temp.next = cur.next;
            cur.next =temp;

        }

    }

10、删除第一次出现关键字为key的节点 remove

    public void remove(int key) {
        if(head==null)
        {
            return;
        }
        if(head.val==key)
        {
            head = head.next;
            return;
        }
        else
        {
            ListNode cur = head;
            while(cur.next!=null)
            {
                if(cur.next.val==key)
                {
                    cur.next = cur.next.next;
                    return;
                }
                cur= cur.next;
            }
        }
        return;
    }

11.删除所有值为key的节点 removeAllKey

   @Override
    public void removeAllKey(int key) {
        if(head==null)
        {
            return;
        }
        while(head.val==key)
        {
            head = head.next;
        }

        ListNode cur = head;
        while(cur.next!=null)
        {
            if(cur.next.val==key)
            {
                cur.next = cur.next.next;

            }
            else
            {
                cur=cur.next;
            }
        }

        return;
    }

12.删除所有值为key的节点 clear

    public void clear() {
        while(head!=null)
        {
            head.val = 0;//如果用泛型就是null
            head.next = null;
            head = head.next;
        }
    }

四、练习

1.移除链表元素

移除链表元素
我这里创了一个头节点headnode,这样后面包括head都可以用一样处理方式,最后返回头节点的下一个节点。

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode headnode = new ListNode();
        headnode.next = head;
        ListNode cur = headnode;
        while(cur.next!=null)
        {
            if(cur.next.val==val)
            {
                cur.next = cur.next.next;
            }
            else 
            {
                cur= cur.next;
            }
        }

        return headnode.next;
    }
}

2.反转链表

反转链表

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        while (cur!=null)
        {
            ListNode temp = cur.next;
            cur.next =pre;
            pre =cur;
            pre = cur;
            cur =temp;
        }
        return pre;
    }
}

3.链表的中间节点

快慢指针:快的一步跳俩节点,慢的跳一节点,当快的到尾,慢的就到了中间。

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode fast = head;
        ListNode low = head;

        while(fast!=null)
        {
            if(fast.next!=null)
            {
                fast = fast.next;
                low = low.next;
            }
            fast = fast.next;
        }
        return low;

    }
}

4.链表中倒数第k个节点

链表中倒数第k个节点

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode cur = head;
        int count = 0;
        while(cur!=null)
        {
            count++;
            cur= cur.next;
        }
        
        ListNode ret = head;
        count=count-k;
        if(count<0)
        {
            return null;
        }
        while(count--!=0)
        {
            ret = ret.next;
        }
        
        return ret;
    }
}

5.合并两个有序链表

合并两个有序链表

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode cur1 = list1;
        ListNode cur2 = list2;
        ListNode head = new ListNode();
        ListNode end = head;
        while(cur1!=null&&cur2!=null)
        {
            if(cur1.val>cur2.val)
            {
                end.next = cur2;
                cur2 = cur2.next;
            }
            else
            {
                end.next = cur1;
                cur1 =cur1.next;
            }
            end = end.next;        
        }
            if(cur1==null)
            {
                end.next = cur2;
            }
            else if(cur2==null)
            {
                end.next = cur1;
            }
        
        return head.next;
    }
}

6.链表分割

链表分割
注意要把大于k的节点最后一个的next置为null可能会出现环

public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        ListNode smallHead = new ListNode(0);
        ListNode bigHead = new ListNode(0);
        ListNode smallCur = smallHead;
        ListNode bigCur = bigHead;
        ListNode cur = pHead;
        while(cur!=null)
        {
            if(cur.val<x)
            {
                smallCur.next = cur;
                smallCur =smallCur.next;
            }
            else
            {
                bigCur.next =cur;
                bigCur = bigCur.next;
            }
            cur = cur.next;
        }
        bigCur.next = null;
        smallCur.next = bigHead.next;
        return smallHead.next;
    }
}

7.链表回文结构

链表回文结构
1、用快慢指针找到中间节点
2、反转后面节点
3、从两边向中间验证是否是回文

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {
        ListNode fast = A;
        ListNode slow = A;
        while(fast!=null&&fast.next!=null)
        {
            fast= fast.next.next;
            slow =slow.next;
        }
        ListNode pre = slow;
        slow = slow.next;
        while(slow!=null)
        {
            ListNode temp = slow.next;
            slow.next = pre;
            pre = slow;
            slow = temp;
        }
        slow =A;
        while(slow!=pre)
        {
            if(slow.val!=pre.val)
            {
                return false;
            }
            if(slow.next==pre)
            {
                break;
            }
            slow = slow.next;
            pre = pre.next;
            
        }
        return true;

    }
}

8.相交链表

相交链表
1、先测出两链表的长度
2、遍历俩链表,让较长的先走相差长度的步数
3、比较节点

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode curA = headA;
        ListNode curB = headB;
        int countA=0,countB=0;
        while(curA!=null)
        {
            countA++;
            curA =curA.next;
        }
        while(curB!=null)
        {
            countB++;
            curB =curB.next;
        }
        curA = headA;
        curB = headB;
        if(countA>countB)
        {
            int differ = countA-countB;
            while(differ--!=0)
            {
                curA = curA.next;
            }
        }
        else
        {
            int differ = countB-countA;
            while(differ--!=0)
            {
                curB = curB.next;
            }
        }

        while(curA!=null)
        {
            if(curA==curB)
            {
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }
        return null;
    }
}

9.环形链表

环形链表
快慢指针,相遇即为环形

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head==null)
        {
            return false;
        }
        ListNode fast = head;
        ListNode slow = head;
        while(fast!=null&&fast.next!=null)
        {
            fast = fast.next.next;
            slow =slow.next;
            if(fast==slow)
            {
                return true;
            }
        }
        return false;
    }
}

10.环形链表2

环形链表2
在快慢相遇时,在开头在创建指针,和相遇慢指针一起走,再次相遇即为环形节点。
在这里插入图片描述

public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow =head;
        while(fast!=null&&fast.next!=null)
        {
            fast = fast.next.next;
            slow = slow.next;
            if(fast==slow)
            {
                break;
            }
        }
        if(fast==null||fast.next==null)
        {
            return null;
        }
        ListNode cur = head;
        while(cur!=slow)
        {
            cur = cur.next;
            slow = slow.next;
        }
        return cur;
    }
}

五、 模拟实现LinkedList

LinkedList是无头双向链表

1.定义接口

//头插法
public void addFirst(int data){ }
//尾插法
public void addLast(int data){}
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data){}
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key){}
//删除第一次出现关键字为key的节点
public void remove(int key){}
//删除所有值为key的节点
public void removeAllKey(int key){}
//得到单链表的长度
public int size(){}
public void display(){}
public void clear(){}

2.定义MyLinkedList

public class MyLinkedList implements IList{

    @Override
    public void addFirst(int data) {

    }

    @Override
    public void addLast(int data) {

    }

    @Override
    public void addIndex(int index, int data) {

    }

    @Override
    public boolean contains(int key) {
        return false;
    }

    @Override
    public void remove(int key) {

    }

    @Override
    public void removeAllKey(int key) {

    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public void display() {

    }

    @Override
    public void clear() {

    }
}

3.成员

1、节点类

存储数据,指向前一个节点的引用,指向后一个节点的引用。

    class ListNode {
        public int val;
        public  ListNode prev;
        public ListNode next;
        public ListNode(int val)
        {
            this.val = val;
        }
    }

2、头引用和尾引用

    public ListNode head;
    public ListNode last;

4.打印链表 display

    public void display() {
        ListNode cur = head;
        while(cur!=null)
        {
            System.out.print(cur.val+" ");
            cur = cur.next;
        }
        System.out.println();
    }

5.查找是否包含关键字key是否在单链表当中 contions

    public boolean contains(int key) {
        ListNode cur = head;
        while(cur!=null)
        {
            if(cur.val==key)
            {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

6.头插法 addFirst

    public void addFirst(int data) {
        ListNode node = new ListNode(data);
        node.next = head;
        node.prev = node;
        head = node;
    }

7.尾插法 addLast

    public void addLast(int data) {
        ListNode node = new ListNode(data);
        if(head==null)
        {
            head =node;
            last = node;
        }
        else
        {
            last.next = node;
            node.prev = last;
            last = node;
        }

    }

8.任意位置插入,第一个数据节点为0号下标 addIndex

    public void addIndex(int index, int data) {
        if(index<0||index>size())
        {
            System.out.println("不合法index");
            return;
        }
        if(index==0)
        {
            addFirst(data);
            return;
        }
        if(index==size())
        {
            addLast(data);
            return;
        }
        int count = index-1;
        ListNode cur = head;
        while(count--!=0)
        {
            cur = cur.next;
        }
        ListNode node =new ListNode(data);
        node.prev = cur;
        node.next = cur.next;
        cur.next.prev =  node;
        cur.next = node;
    }

9.得到单链表的长度 size

   public int size() {
        ListNode cur =head;
        int count =0;
        while(cur!=null)
        {
            count++;
            cur =cur.next;
        }

        return count;
    }

10.删除第一次出现关键字为key的节点 remove

注意以下特殊情况:
1、删除头一个情况
2、删除头一个情况且只有一个节点
3、删除最后一个

   public void remove(int key) {
        ListNode cur  = head;
        while(cur!=null)
        {
            if(cur.val==key)
            {
                if(cur==head){
                    head = head.next;
                    if(head==null)
                    {
                        last = null;
                    }
                    else {
                        head.prev =null;
                    }
                }
                else
                {
                    cur.prev.next = cur.next;
                    if(cur.next==null)
                    {
                        last = last.prev;
                    }
                    else {
                        cur.next.prev = cur.prev;
                    }
                }
                return;
            }
            cur =cur.next;


        }

    }

11.删除所有值为key的节点 removeAllKey

同上但删除不return

    public void removeAllKey(int key) {
        ListNode cur  = head;
        while(cur!=null)
        {
            if(cur.val==key)
            {
                if(cur==head){
                    head = head.next;
                    if(head==null)
                    {
                        last = null;
                    }
                    else {
                        head.prev =null;
                    }
                }
                else
                {
                    cur.prev.next = cur.next;
                    if(cur.next==null)
                    {
                        last = last.prev;
                    }
                    else {
                        cur.next.prev = cur.prev;
                    }
                }
            }
            cur =cur.next;
        }
    }

12.清空 clear

    public void clear() {
        ListNode cur = head;
        while(cur!=null)
        {
            cur.prev = null;
            cur.val =-1;//如果是引用要置空null
            ListNode temp = cur.next;
            cur.next = null;
            cur = temp;
        }
        head =null;
        last =null;
    }

六、LinkedList

1.遍历

    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println(list);
        System.out.println();
        System.out.println("========");
        for(Integer x:list)
        {
            System.out.print(x+" ");
        }
        System.out.println();
        System.out.println("========");
        for(int i = 0;i<list.size();i++)
        {
            System.out.print(list.get(i)+" ");
        }
        System.out.println();

        System.out.println("========");
        ListIterator<Integer> it = list.listIterator();
        while(it.hasNext())
        {
            System.out.print(it.next()+" ");
        }
        System.out.println();

        ListIterator<Integer> it2 = list.listIterator(list.size());
        while(it2.hasPrevious())
        {
            System.out.print(it2.previous()+" ");
        }
        System.out.println();
    }

在这里插入图片描述

2.ArrayList和LinkedList的区别?

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/367004.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【服务器搭建】快速完成幻兽帕鲁服务器的搭建及部署【零基础上手】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 教程详戳&#xff1a;不需要懂技术&#xff0c;1分钟幻兽帕鲁服…

Datax问题记录

1、同步mysql&#xff1a;OS errno 24 - Too many open files 2023-11-20 12:30:04.371 [job-0] ERROR JobContainer - Exception when job run com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的…

【Kafka】 幂等和事务详解

目录 幂等性为什么需要幂等性如何实现幂等性使用幂等幂等性的限制条件幂等性的实现原理 事务为什么需要事务开启事务事务保证事务恢复的保证事务原子性的保证事务中 Offset 的提交保证用于事务特性的控制型消息 事务流程事务原理FindCoordinatorRequestInitProducerIdRequest开…

2.2作业

1、写一个宏&#xff0c;可以将一个int型整数的二进制位的奇数位和偶数位交换 2、递归实现字符串逆置 void func (char *src) {if (strlen(src) 0){return;} else{ func(&src[1]);printf("%c", src[0]);} } int main(int argc, const char *argv[]) { char *s …

☻C++ QA

0. 什么是“第一性原理”&#xff1f; 函数指针的定义泛式与原理&#xff1f;联合(union)的原理是怎样的&#xff1f;联合类型对象的指针是什么意思&#xff1f;命名空间在.h和.cpp中怎么定义和使用&#xff0c;是什么原理&#xff1f;静态变量/函数在.h和.cpp中怎么定义和使用…

资源推荐:web js linux windows vm 虚拟机

web js vm list https://bellard.org/jslinux/index.html 可以在在浏览器中运行 X Window 或 Windows 2000、linux 以下为示例&#xff1a; JSLinux - News 从2018-08-18开发更新到2021-01-09 … https://bellard.org/jslinux/news.html faq 常见问题解答 https://bella…

flv视频格式批量截取封面图(不占内存版)--其他视频格式也通用

flv视频格式批量截取封面图&#xff08;不占内存版&#xff09;--其他视频格式也通用 需求&#xff08;实现的效果&#xff09;功能实现htmlcssjs 需求&#xff08;实现的效果&#xff09; 批量显示视频&#xff0c;后端若返回有imgUrl,则直接显示图1&#xff0c; 若无&#xf…

如何使用VSCode上运行Jupyter,详细案例过程出可视化图

Python作为最受AI喜欢的语言之一&#xff0c;我们与大家共同学习下如何在VS Code上运行Jupyter&#xff0c;并且用简单案例实现出图。 环境 VS Code version: 1.80.1 Python: 3.12.0 小白安装过程&#xff1a; 在准备好基础环境&#xff0c;小白心想&#xff0c;AI可是霸占科…

爬虫(二)使用urllib爬取百度贴吧的数据

下一期我就不用urllib来抓取数据了&#xff0c;因为urllib现在已经很少人用&#xff0c;大部分人用得是requests&#xff0c;requests也是基于底层urllib的一个模块。 首先我先来讲一下关于如何使用动态的UA&#xff01; 动态UA就是指在自己创建的一个列表里随机选择一个UA当做…

07 SB3之@HttpExchange(TBD)

HttpExchange是SpringBoot3的新特性. Spring Boot3 提供了新的 HTTP 的访问能力&#xff0c;封装了Http底层细节. 通过接口简化 HTTP远程访问&#xff0c;类似 Feign 功能。 SpringBoot 中定义接口提供 HTTP 服务 --> 框架生成的代理对象实现此接口 --> 框架生成的代理…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3-management方式二&#xff1a;从本地加载 上传到虚拟机中后&#xff0c;使用命令加载镜像即可&#xff1a; docker load -i mq.ta…

全面认识DOS系统

目录 一、DOS系统的功能 1.执行命令和程序&#xff08;处理器管理&#xff09; 2.内存管理 3.设备管理 4.文件管理 5.作业管理 二、文件与目录 三、文件类型与属性 1.系统属性&#xff08;S&#xff09; 2.隐含属性&#xff08;H&#xff09; 3.只读属性&#xff08…

Window命令行 如何查看以及关闭进程

目录 前言1. 基本知识2. Demo 前言 用习惯了Linux操作系统&#xff0c;突然想用Window&#xff0c;发现很陌生&#xff01; 补充一波Linux的基本命令&#xff1a; 查看进程和端口信息&#xff1a; 通过 netstat -tanp 命令查看系统上的所有网络连接&#xff0c;然后通过 grep…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

day36 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;435 无重叠区间 题意 intervals[i][starti&#xff0c;endi] 移除区间&#xff0c;使得区间互不重叠&#xff0c;返回移除区间的最小数量 相邻区间挨在一起&#xff0c;尽量移除重叠区间 代码 class Solution { publ…

【C语言】异常处理 | assert函数 | errno错误码

文章目录 C语言传统的处理错误的方式1. 终止程序&#xff08;例如使用 assert&#xff09;2. 返回/设置错误码手动实现C语言库函数内置的错误码Linux系统调用内置的错误码 C语言传统的处理错误的方式 C语言传统的处理错误的方式主要包括assert终止程序和返回或设置错误码两种方…

面试经典150题 -- 区间(总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台最经典 150 题&#xff0c;掌握面试所有知识点https://leetcode.cn/studyplan/top-interview-150/ 228 汇总区间 直接用双指针模拟即可 ; class Solution { public…

数据结构——实验01-线性表的链式存储和操作

一、实验内容 二、算法思想与算法实现 1、解题思想 &#xff08;1&#xff09;逆序创建链表La就是使用头插法创建一个链表&#xff0c;所谓头插法就是在创建链表时始终将新元素插入到头结点之后&#xff0c;而正序创建链表Lb就是使用尾插法创建一个链表&#xff0c;所谓尾插法…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起…

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…
最新文章