算法:链表(力扣+牛客经典题)

news2024/11/23 19:24:22

链表

力扣

203. 移除链表元素

思路:使用while循环每找到指定的值,就把下一个节点指向下下个节点的位置

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // 初始化链表 第一个值为0
        ListNode listNode = new ListNode(0,head);
        // 因为单链表是不可逆的,所以把listNode的 地址赋给 temp,就可以控制temp来操作链表,
        ListNode temp = listNode;
        // 循环找值,并去掉
        while (temp.next != null){
            if (temp.next.val == val){
                // 如果temp.next有值,最不济temp.next.next为null,而把null重新赋给temp.next也不会报空节点异常
                temp.next = temp.next.next;
            } else {
                temp = temp.next;
            }
        }
        // 因为listNode的初始值为0,他的下一个才是原数组head(删掉了指定的值)
        return listNode.next;
    }
}

206. 反转链表

在这里插入图片描述

思路:就是先设一个值为null,再用head开头的值指向这个null,再把head指向下一个,重复

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode a = null;
        ListNode listNode = head;
        // 循环这个链表
        while (listNode!=null){
            // 设置一个b指向listNode 的下一个节点
            ListNode b = listNode.next;
            // listNode最前面的值的后一个指向a这个链表
            listNode.next = a;
            // 再把listNode这个链表赋给a
            a = listNode;
            // listNode 指向他的下一个节点,用于循环
            listNode = b;
        }
        return a;
    }
}

24. 两两交换链表中的节点

在这里插入图片描述

思路:每次找到要旋转的个数,并旋转,剩余的链表进入递归,并挨个拼接

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode listNode = reverseKGroup(head, 2);
        return listNode;
    }
    public ListNode reverseKGroup (ListNode head, int k) {
        //找到每次翻转的尾部
        ListNode tail = head;
        //遍历k次到尾部
        for(int i = 0; i < k; i++){
            //如果不足k到了链表尾,直接返回,不翻转
            if(tail == null) {
                return head;
            }
            tail = tail.next;
        }
        // 这里就是翻转链表的知识点
        //翻转时需要的前序和当前节点
        ListNode pre = null;
        ListNode cur = head;
        //在到达当前段尾节点前
        while(cur != tail){
            //翻转
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
        }
        //当前尾指向下一段要翻转的链表
        head.next = reverseKGroup(tail, k);
        return pre;
    }
}

19. 删除链表的倒数第 N 个结点

在这里插入图片描述

思路:使用双指针,先让前节点走N+1步,后节点不动,然后遍历前节点,直到前节点指向null的时候,后节点的节点指向倒数N个节点的前一个节点

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // 初始化
        ListNode x = new ListNode(0,head);
        ListNode a = x;
        // 这一步和下面的for循环就是指,b链表要先走n+1步
        ListNode b = x.next;
        for (int i = 0; i < n; i++) {
            b = b.next;
        }
        // 通过b走到头了之后,a链表指向的就是倒数n+1个节点
        while (b!=null){
            a = a.next;
            b = b.next;
        }
        // a下一个节点直线a的下下个节点就可以了
        a.next = a.next.next;
        return x.next ;
    }
}

160.链表相交

在这里插入图片描述

思路:意思就是说两个链表后面节点可能相同,那么后面的长度也是一样的,就需要把前面长的链表给截成和短的链表一样长,然后进行比较,不一样就一起后移

/**
 * 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) {
        // 使用AL和BL记录两个链表的长度
        int AL = 0;
        int BL = 0;
        ListNode aL = headA;
        ListNode bL =headB;
        while (aL!=null){
            AL++;
            aL = aL.next;
        }
        while (bL!=null){
            BL++;
            bL = bL.next;
        }
        aL = headA;
        bL = headB;
        // 截取长的链表,使两个链表一样长
        if (AL > BL){
            for (int i = 0; i < AL - BL; i++) {
                aL = aL.next;
            }
        }else {
            for (int i = 0; i < BL - AL; i++) {
                bL = bL.next;
            }
        }
        // 循环比较是否相同,返回相同的部分
        while (aL!=null){
            if (aL == bL){
                return aL;
            }
            aL = aL.next;
            bL = bL.next;
        }
        return null;
    }
}

142.环形链表 II

在这里插入图片描述

思路:一、先要判断是否是循环链表;二、要找出循环入口节点

一判断是否循环

使用快慢指针,前指针每次走两个节点,后指针每次走一个节点,如果是循环链表的话,前一个指针会追上后一个指针的,可以做一下试验:

如示例一:前走两步,后走一步

两个从三开始

第一次:前:2,0;后:2;

第二次:前:-4,2;后:0;

第三次:前:0,-4;后:-4;

结束

二、要找出循环入口节点

先定位到判断循环链表的那个节点,如上诉的0这个节点,再从开头(3)走一个值,他们两个每次只走一步,如果他们相等的话,就是那个节点循环的头

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode left = head;
        ListNode right = head;
        // 因为right要走两步,怕出现空指针异常(如果 right.next 为null的话,right.next.next就会空指针异常)
        while (right != null && right.next != null){
            // 判断是否循环
            left = left.next;
            right = right.next.next;
            if (left == right){
                left = head;
                // 找循环的头节点
                while (left != right){
                    left = left.next;
                    right = right.next;
                }
                return left;
            }
        }
        return null;
    }
}

牛客:

BM1 反转链表(同力扣:206.循环链表,上面有讲)

BM2 链表内指定区间反转

在这里插入图片描述

思路:截取翻转,并连接

import java.util.*;

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

public class Solution {
    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
        //设置虚拟头节点
        ListNode dummyNode = new ListNode(-1);
        dummyNode.next = head;

        ListNode pre = dummyNode;
        //1.走left-1步到left的前一个节点
        for(int i=0;i<m-1;i++){
            pre = pre.next;
        }

        //2.走roght-left+1步到right节点
        ListNode rigthNode = dummyNode;
        for(int i=0;i<n;i++){
            rigthNode = rigthNode.next;
        }

        //3.截取出一个子链表
        ListNode leftNode = pre.next;
        ListNode cur = rigthNode.next;

        //4.切断链接
        pre.next=null;
        rigthNode.next=null;

        //5.反转局部链表
        reverseLinkedList(leftNode);

        //6.接回原来的链表
        pre.next = rigthNode;
        leftNode.next = cur;
        return dummyNode.next;
    }
    //反转局部链表
    private void reverseLinkedList(ListNode head){
        ListNode pre = null;
        ListNode cur = head;
        while(cur!=null){
            //Cur_next 指向cur节点的下一个节点
            ListNode Cur_next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = Cur_next ;
        }
    }
}

BM3 链表中的节点每k个一组翻转(同力扣:24. 两两交换链表中的节点,上面有讲)

BM4 合并两个排序的链表

在这里插入图片描述

思路:一直循环,比较两个链表当时的大小,小的那个加入新的链表,并指向后一个节点,大的链表不动,最后哪个链表还有剩的话,就自动加入后面就可以了

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode listNode = new ListNode(-1);
        // 新的链表
        ListNode x = listNode;
        while (list1 != null&&list2!=null){
            // 判断哪个链表的节点大,把小的节点接入新的链表
            if (list1.val > list2.val){
                x.next = list2;
                x = x.next;
                list2 = list2.next;
            }else {
                x.next = list1;
                x = x.next;
                list1 = list1.next;
            }
        }
        //哪个链表还有剩,直接连在后面
        if(list1 != null)
            x.next = list1;
        else
            x.next = list2;
        return listNode.next;
    }
}

BM5 合并k个已排序的链表

在这里插入图片描述

思路:这里使用了PriorityQueue优先队列(最小堆),这个数据结构可以把最小值顶到堆的最前面,使用我只需要,把list里面的所有值放入最小堆里面,然后遍历最小堆,得到一个完整的新链表就可以了

import java.util.*;
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode mergeKLists(ArrayList<ListNode> lists) {
        // 优先队列(最小堆)
        Queue<Integer> queue = new PriorityQueue<>();
        // 加入最小堆里面
        lists.forEach(x->{
            while (x!=null){
                queue.offer(x.val);
                x = x.next;
            }
        });
        // 新建一个链表用来装遍历最小堆的最前面就可以了
        ListNode listNode = new ListNode(-1);
        ListNode x = listNode;
        while (!queue.isEmpty()){
            x.next = new ListNode(queue.poll());
            x = x.next;
        }
        return listNode.next;
    }
}

BM6 判断链表中是否有环(同力扣:142.环形链表 II的第一个观点寻找循环链表,上面有讲)

BM7 链表中环的入口结点(同力扣:142.环形链表 II的第二个观点寻找循环链表入口节点,上面有讲)

BM8 链表中倒数最后k个结点

在这里插入图片描述

思路:双指针,先让前节点走N+1步,后节点不动,然后遍历前节点,直到前节点指向null的时候,后节点的节点指向倒数N个节点的前一个节点

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode FindKthToTail (ListNode pHead, int k) {
        if (pHead==null){
            return pHead;
        }
        ListNode x = pHead;
        for (int i = 0; i < k; i++) {
            if (x == null){
                return null;
            }
            x = x.next;
        }
        ListNode y = pHead;
        while (x != null){
            x = x.next;
            y = y.next;
        }
        return y;
    }
}

BM9 删除链表的倒数第n个节点(同力扣:19. 删除链表的倒数第 N 个结点,上面有讲)

BM10 两个链表的第一个公共结点(同力扣:160.链表相交,上面有讲)

BM11 链表相加(二)

在这里插入图片描述

思路:先翻转两个链表(因为加法都是从个位加着走,所以翻转一个从头一个加到尾,再翻转一下,就是我们需要的值),就是取到每个节点值相加,如果进位就往前加一个,如果到最后一个节点还需要进位,就再下一个节点输入一。

import java.util.*;

import java.math.BigInteger;
/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    public ListNode addInList (ListNode head1, ListNode head2) {
        // 翻转
        ListNode a = reverse(head1);
        ListNode b = reverse(head2);
        // c是判断需要进位不,如果是0就是没进位,1就是需要进位的那个加上1
        int c = 0;
        // x是a链表节点的值
        int x = 0;
        // y是b链表节点的值
        int y = 0;
        // 通过d来记录listNode的地址,listNode变动的时候,d还是指向没变动的头结点
        ListNode listNode = new ListNode(-1);
        ListNode d = listNode;
        while (a!=null||b!=null){
            // 给x赋值
            if (a!=null){
                x = a.val;
                a = a.next;
            }else {
                x = 0;
            }
            // 给y赋值
            if (b!=null){
                y = b.val;
                b = b.next;
            }else {
                y = 0;
            }
            // 让listNode.next指向新建一个链表
            // (x+y+c)%10 可以得到个位的值,存入新的链表
            listNode.next = new ListNode((x+y+c)%10);
            listNode = listNode.next;
            // 判断是否进位 如果十位有值 c就位十位的值
            c = (x + y + c)/10;
        }
        // 最后当两条链表都加完的时候,进位不为0的时候,则需要再加上这个进位
        if(c > 0){
            listNode.next = new ListNode(c);
        }
        // 再次翻转
        return reverse(d.next);
    }

    // 反转链表
    ListNode reverse(ListNode head){
        if(head == null) {
            return head;
        }
        ListNode cur = head;
        ListNode node = null;
        while(cur != null){
            ListNode tail = cur.next;
            cur.next = node;
            node = cur;
            cur = tail;
        }
        return node;
    }
}

BM12 单链表的排序

在这里插入图片描述

思路:一、变成数组然后排序重新写入链表;二、使用PriorityQueue优先队列(最小堆)排序取值就可以了

import java.util.*;

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

public class Solution {
    /**
     * 
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    public ListNode sortInList (ListNode head) {
        // 最小堆
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        // 存入最小堆
        while (head!=null){
            queue.add(head.val);
            head = head.next;
        }
        ListNode listNode = new ListNode(-1);
        ListNode x = listNode;
        // 从最小堆取值,然后组成新的数组
        while (!queue.isEmpty()){
            listNode.next = new ListNode(queue.poll());
            listNode = listNode.next;
        }
        return x.next;
    }
}

BM13 判断一个链表是否为回文结构

在这里插入图片描述

思路:把链表的值写入一个数组里面,然后利用双指针判断是否是回文就可以了(就是第一个指针指向头,后一个指针指向尾,判断是否相等,相等就向前比较就可以了)

import java.util.*;

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

public class Solution {
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    public boolean isPail (ListNode head) {
        ArrayList<Integer> list = new ArrayList<>();
        // 变成一个list集合
        while (head!=null){
            list.add(head.val);
            head = head.next;
        }
        int x = 0;
        int y = list.size() - 1;
        // 双指针判断是否为回文
        while (x<y){
            if (!list.get(x++).equals(list.get(y--))){
                return false;
            }
        }
        return true;
    }
}

BM14 链表的奇偶重排

在这里插入图片描述

思路:看代码

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */
public class Solution {
    public ListNode oddEvenList (ListNode head) {
        //如果链表为空,不用重排
        if(head == null) 
            return head;
        //even开头指向第二个节点,可能为空
        ListNode even = head.next; 
        //odd开头指向第一个节点
        ListNode odd = head; 
        //指向even开头
        ListNode evenhead = even; 
        while(even != null && even.next != null){
            //odd连接even的后一个,即奇数位
            odd.next = even.next; 
            //odd进入后一个奇数位
            odd = odd.next; 
            //even连接后一个奇数的后一位,即偶数位
            even.next = odd.next; 
            //even进入后一个偶数位
            even = even.next; 
        } 
        //even整体接在odd后面
        odd.next = evenhead; 
        return head;
    }
}

BM15 删除有序链表中重复的元素-I

在这里插入图片描述

思路:因为是有序的,所以只要后一个节点的值与自己节点一样,把后一个节点指向下下个节点就可以了

import java.util.*;

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

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        ListNode a = head;
        while (head!=null && head.next!=null){
            // 如果后一个节点和自己节点值相等的话,就删除掉,并不需要移动自己的指针
            if (head.val == head.next.val){
                head.next = head.next.next;
                continue;
            }
            head = head.next;
        }
        return a;
    }
}

BM16 删除有序链表中重复的元素-II

在这里插入图片描述

思路:添加一个表头,然后看下一个节点与下下个节点是否相同,如果相同,再循环看看后面的节点的值是否一样,相同就全部跳过

import java.util.*;

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

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        //空链表
        if(head == null)
            return null;
        ListNode res = new ListNode(0);
        //在链表前加一个表头
        res.next = head;
        ListNode cur = res;
        while(cur.next != null && cur.next.next != null){
            //遇到相邻两个节点值相同
            if(cur.next.val == cur.next.next.val){
                int temp = cur.next.val;
                //将所有相同的都跳过
                while (cur.next != null && cur.next.val == temp)
                    cur.next = cur.next.next;
            }
            else
                cur = cur.next;
        }
        //返回时去掉表头
        return res.next;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【指针笔试题下】你知道大厂面试题的指针题是什么样的吗?快来通过这些面试题目检测一下自己吧!

目录 前言 笔试题1&#xff1a; 笔试题2&#xff1a; 笔试题3&#xff1a; 笔试题4&#xff1a; 笔试题5&#xff1a; 笔试题6&#xff1a; 笔试题7&#xff1a; 笔试题8&#xff1a; 总结&#xff1a; 博客主页&#xff1a;张栩睿的博客主页 欢迎关注&#xff1a;点赞收藏留…

JVM--Garbage First(G1) 垃圾收集器

G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器&#xff0c;在 JDK9 中更被指定为官方GC收集器一、G1…

【零基础】学python数据结构与算法笔记12

文章目录前言74.AVL树的概念75.AVL:旋转76.AVL:旋转实现177.AVL:旋转实现278.AVL:插入79.AVL树应用与数据结构总结总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 74.AVL树的概念 首先看一下二叉搜索树的效率 平均情况下&#xff0c…

networkx学习(三) 小世界网络

networkx学习(三) 小世界网络 1.小世界网络模型 K-近邻规则网络的生成与可视化

彻底分析Arduino库安装和开发板库安装路径和方式

参考&#xff1a;https://blog.csdn.net/weixin_43794311/article/details/128631564&#xff0c;https://blog.csdn.net/t01051/article/details/103766886 一个最简单的安装esp8266和esp32的方法 在网址&#xff1a;https://arduino.me/download&#xff0c;下载对应的开发…

dp(七)把数字转化为字符串 (力扣版+牛客版) 跳台阶问题+最小花费跳台阶

目录 l剑指 Offer 46. 把数字翻译成字符串力扣版本 把数字翻译成字符串_牛客题霸_牛客网牛客版 滚动数组优化 跳台阶【一】 &#xff08;大数取模&#xff09;一 八个零七 最小花费爬楼梯 l剑指 Offer 46. 把数字翻译成字符串力扣版本 给定一个数字&#xff0c;按照对应的格…

【微信小程序入门到精通】—小程序实战构建售货平台首页

目录前言一、步骤阐述二、新建项目并梳理结构三、配置导航栏四、tabBar 实现五、轮播图实现总结前言 对于目前形式&#xff0c;微信小程序是一个热门&#xff0c;那么我们该如何去学习并且掌握之后去做实际项目呢&#xff1f; 为此我特意开设此专栏&#xff0c;在我学习的同时也…

买车是个计算题,看上了比亚迪的宋DMI,选择困难了,选择55km的还是,110km的,理科生一起计算下。

1&#xff0c;背景 赶时髦&#xff0c;啥新鲜就购买啥&#xff0c;最火的车子当然是比亚迪宋dmi。 大家都买说明还不错&#xff0c;买车还要排队。等上一阵子了。 而且可以省下购置税。 就按照最热销的110 km 的版本 17/1.13*0.1 1.50 w 按照发票上“价税总计”金额计算的话…

计算两个字符串的相似度difflib.SequenceMatcher

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算两个字符串的相似度 difflib.SequenceMatcher 选择题 对于以下python代码表述错误的是? from difflib import SequenceMatcher myText1"我想学习Python做人工智能项目" myTex…

SpringCloud-Netflix学习笔记01——SpringCloud入门

一、SpringCloud是什么 Spring官网&#xff1a;https://spring.io/ SpringCloud, 基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注册与发现&#xff0c;配置中心&#xff0c;全链路监控&#xff0c;服务网关&#xff0c;负载均衡&#xff0c;熔断器等组件&#…

mybatis plus基本使用初体验02

1.常用注解 1.1 TableName注解 MyBatis-Plus在确定操作的表时&#xff0c;由BaseMapper的泛型决定&#xff0c;即实体类型决定&#xff0c;且默认操作的表名和实体类型的类名一致。若实体类类型的类名和要操作的表的表名不一致&#xff0c;会出现什么问题&#xff1f; 将数据…

力扣sql基础篇(八)

力扣sql基础篇(八) 1 大满贯数量 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Championship的数字代表的就是赢得比赛的球员的id,可以使用行转列(UNION all) #如果涉及到分组函数,建议还是不要写除了分组字段外的其他字段,因为不太符合标准sql …

正则化:五重境界理解减少过拟合的神器

本文来自公众号“AI大道理” 正则化作为减少过拟合的手段被大量的使用&#xff0c;那么为什么会出现过拟合呢&#xff1f;正则化又是什么&#xff1f;是怎么样发挥作用的呢&#xff1f; 1、过拟合是什么&#xff1f; 过拟合是指模型在训练集上取得很高的识别性能&#xff0c…

Ubuntu 22.04配置静态IP地址

1、查看ip地址网卡名称&#xff1a;ifconfig 2、编辑网卡配置文件&#xff1a;sudo vim /etc/netplan/01-network-manager-all.yaml 默认样式&#xff1a; network: version: 2 renderer: NetworkManager 3、修改为&#xff1a; network: ethernets: enp7s0: dhcp4: no dhcp6: …

【Kotlin】集合操作 ① ( List 创建与元素获取 | 安全获取集合元素 | getOrElse | getOrNull )

文章目录一、List 创建与元素获取二、安全获取集合元素1、getOrElse 函数2、getOrNull函数三、List 创建与元素获取代码示例一、List 创建与元素获取 Kotlin 中的集合分为两类 , 只读集合 和 可变集合 ; 调用 listOf 函数 , 可以 直接创建 List 集合 ; 通过 [] 下标可以 直接获…

Spring系列 容器

创建容器 方式一&#xff1a;类路径加载配置文件&#xff1a; ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml"); 方式二&#xff1a;文件路径加载配置文件&#xff08;用绝对路径&#xff09;&#xff1a; ApplicationConte…

闲话统信UOS

这周统信UOS正式在官网发布了22.0镜像统信UOS家庭版官网-正版国产操作系统--统信软件 (uniontech.com) 支持双系统&#xff1a;不影响原有系统使用&#xff0c;更换系统不担心电脑资料丢失&#xff1b; 官方应用商店&#xff1a;无病毒、放心安全下载&#xff0c;工作学习无打…

[C/Linux练习]进度条小程序

前置知识点 \n\r \n 换行&#xff0c;但只是垂直向下&#xff0c;并不水平移动。 \r 回车&#xff0c;返回当前行的头部。 光标返回头部后再打印&#xff0c;会从头开始覆盖之前打印在该行的内容。 printf的\n默认解释成换行回车。 光标是与显示器匹配的&#xff0c;光标在哪…

基于PHP的宠物社会化小程序

摘要随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Java集合面试题

集合容器概述 什么是集合 集合框架&#xff1a;用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容&#xff1a;对外的接口、接口的实现和对集合运算的算法。 接口&#xff1a;表示集合的抽象数据类型。接口…