首页 > 其他分享 >day03

day03

时间:2025-01-17 19:54:50浏览次数:1  
标签:index ListNode val day03 next 链表 节点

统一使用的结点类:
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

  1. 反转链表(206. Reverse Linked List)
    问题描述:给定一个单链表,将其反转。
    //206.反转链表
    public ListNode reverseList(ListNode head) {
    ListNode curr = head;
    ListNode res=null;
    while (curr != null) {
    res=new ListNode(curr.val,res);
    curr=curr.next;
    }
    return res;
    }
    解释:
    使用一个临时节点res来构建反转后的链表。
    遍历原链表,每次创建一个新节点,将其值设置为当前节点的值,并将新节点的next指针指向res。
    更新res为新节点,继续遍历直到原链表结束。
    返回res,即反转后的链表的头节点。

  2. 移除链表元素(203. Remove Linked List Elements)
    问题描述:给定一个链表和一个值val,删除链表中所有值为val的节点,并返回新的链表。
    解决方案:
    //203.移除链表元素
    public ListNode removeElements(ListNode head, int val) {
    ListNode res = new ListNode(Integer.MIN_VALUE,head);
    ListNode cur = res;
    while (cur.next != null) {
    if(cur.next.val == val){
    cur.next = cur.next.next;
    }else {
    cur = cur.next;
    }
    }
    return res.next;
    }
    }
    解释:
    使用一个哨兵节点res,其next指针指向原链表的头节点。
    遍历链表,如果当前节点的下一个节点的值等于val,则跳过该节点。
    否则,移动当前节点到下一个节点。
    返回res.next,即新的链表的头节点。

  3. 设计链表(707. Design Linked List)
    问题描述:设计一个支持以下操作的链表:
    MyLinkedList():初始化链表。
    int get(int index):获取链表中下标为index的节点的值。如果下标无效,则返回-1。
    void addAtHead(int val):将一个值为val的节点插入到链表中第一个元素之前。
    void addAtTail(int val):将一个值为val的节点追加到链表中作为链表的最后一个元素。
    void addAtIndex(int index, int val):将一个值为val的节点插入到链表中下标为index的节点之前。
    void deleteAtIndex(int index):如果下标有效,则删除链表中下标为index的节点。
    解决方案:
    //707.设计链表
    class MyLinkedList {
    ListNode head;
    int size;
    //MyLinkedList() 初始化 MyLinkedList 对象。
    public MyLinkedList() {
    this.head = new ListNode();
    this.size = 0;
    }
    //int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。
    public int get(int index) {
    if(index < 0 || index >= size) {
    return -1;
    }
    int count = 0;
    ListNode cur = head.next;//=========
    while (cur != null) {
    if (count == index) {
    return cur.val;
    }else {
    cur = cur.next;
    count++;
    }
    }
    return -1;
    }
    //void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。
    public void addAtHead(int val) {
    head.next = new ListNode(val, head.next);
    size++;
    }
    //void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。
    public void addAtTail(int val) {
    /if (size == 0) {
    head.next = new ListNode(val);
    }else {
    ListNode last = getNode(size - 1);
    if (last != null) {
    last.next = new ListNode(val);
    }
    }
    size++;
    /
    ListNode newNode = new ListNode(val);
    if (size == 0) {
    // 链表为空,新节点直接成为头节点的下一个节点
    head.next = newNode;
    } else {
    // 获取最后一个节点
    ListNode lastNode = getNode(size - 1);
    if (lastNode != null) {
    lastNode.next = newNode;
    }
    }
    size++;
    }
    //void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。
    // 如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。
    public void addAtIndex(int index, int val) {
    if(index<0 || index>size){
    return;
    }
    if (indexsize){
    addAtTail(val);
    }else {
    if(index
    0){
    addAtHead(val);
    }else {
    ListNode cur = getNode(index - 1);
    if (cur != null) {
    cur.next = new ListNode(val, cur.next);
    size++;
    }
    }
    }
    }
    //void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。
    public void deleteAtIndex(int index) {
    if(index<0 || index>=size){
    return;
    }
    if(index0){
    head.next = head.next.next;
    //size--;
    }else {
    ListNode cur = getNode(index - 1);
    if (cur != null) {
    cur.next = cur.next.next;
    }
    }
    size--;
    }
    private ListNode getNode(int index) {
    if(index<0 || index>=size){
    return null;
    }
    ListNode cur = head.next;//
    ==
    int count = 0;
    while (cur != null) {
    if (count == index) {
    return cur;
    }else {
    cur = cur.next;
    count++;
    }
    }
    return null;
    }
    解释:
    MyLinkedList构造方法:初始化一个哨兵节点head和链表的大小size。
    get方法:获取链表中下标为index的节点的值。如果下标无效,则返回-1。
    addAtHead方法:将一个值为val的节点插入到链表中第一个元素之前。
    addAtTail方法:将一个值为val的节点追加到链表中作为链表的最后一个元素。
    addAtIndex方法:将一个值为val的节点插入到链表中下标为index的节点之前。如果index等于链表的长度,则该节点会被追加到链表的末尾。如果index比长度更大,则该节点将不会插入到链表中。
    deleteAtIndex方法:如果下标有效,则删除链表中下标为index的节点。
    getNode方法:返回索引位置的前一个节点,这样在addAtIndex和deleteAtIndex方法中可以直接使用返回的节点进行操作。

标签:index,ListNode,val,day03,next,链表,节点
From: https://www.cnblogs.com/lin0304/p/18677583

相关文章

  • day03循环基础编程练习
    1.汽车牌照号码由字母和数字随机组成,长度为5位随机的字母和数字组合,可以通UUID.randomUUID().toString()产生。每次产生后,由用户决定是否继续产生?(Y/N),如果输入Y后,则继续生成;如果用户输入N,程序结束。packagehomework;/*●汽车牌照号码由字母和数字随机组成,长度为5位●......
  • Day03
    打开CMD的方式开始+系统+命令提示符Win键+R输入cmd打开控制台(推荐使用)在任意文件夹下面,按住Shift键+鼠标右键点击,在此处打开命令行窗口资源管理器的地址栏前面加上cmd路径(中间需要空格)管理员方式运行:选择以管理员方式运行常用的DOS命令1.#盘符切换2.#查看当前目录下......
  • java从入门到起飞 day03
    day03运算符和表达式运算符:对字面量或者变量进行操作的符号表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。常见运算符小细节只有整数参与计算,结果只能得到整数,有小数部分则......
  • HarmonyOS学习Day03
    #学习视频:bilibili蜗牛学苑#一、ArkTS实战ArkTS主要负责页面上数据维护、交互、以及基础属性的使用。ArkUI负责页面的布局。ArkTS负责对组件的数据、事件等等进行维护组件的参数在使用ArkUI进行布局的时候,组件采用括号的方式来引入使用Column(参数){//存放子元素}......
  • AJAX笔记-day03
    一、XMLHttpRequest的基本使用XMLHttpRequest(简称xhr)是浏览器提供的Javascript对象,通过它,可以请求服务器上的数据资源。之前所学的jQuery中的Ajax函数,就是基于xhr对象封装出来的。1.使用xhr发起GET请求步骤:①创建 xhr 对象②调用 xhr.open......
  • 【前端Vue】day03
    一、今日目标1.生命周期生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例2.综合案例-小黑记账清单列表渲染添加/删除饼图渲染3.工程化开发入门工程化开发和脚手架项目运行流程组件化组件注册4.综合案例-小兔仙首页拆分模块-局部注册结构样式完善拆分组件–......
  • 嵌入式学习-IO进程-Day03
    嵌入式学习-IO进程-Day03IO进程获取文件属性(stat)库库的概念库的分类静态库的制作动态库的制作进程进程和程序的区别进程的特点进程三段进程的类型进程的运行状态进程状态转换图(重点)进程的函数接口创建进程forkfork函数创建的子进程的特点IO进程获取文件......
  • C++ day03(作用域限定符、this、static、const)
    目录【1】作用域限定符::1》名字空间2》类内声明,类外定义 【2】this关键字1》概念2》调用成员3》区分重名的成员变量与局部变量4》链式调用 【3】static关键字1》静态局部变量2》静态成员变量3》静态成员函数【4】const关键字1》修饰成员函数2》修饰对象 ......
  • 代码随想录算法训练营Day03-链表 | LC203移除链表元素、LC707设计链表、LC206反转链表
    目录前言LeetCode203.移除链表元素思路完整代码LeetCode707.设计链表思路完整代码LeetCode206.反转链表思路完整代码今日总结前言拖延症犯了,哈哈,拖了一天LeetCode203.移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val......
  • Day03--计算机语言的发展
    计算机语言的发展机器语言第一代语言,机器语言,我们都知道计算机的基本计算方式都是基于二进制的方式,二进制:010111001010110010110100,这种代码是直接输入给计算机使用的,不经过任何的转换!汇编语言第二代语言汇编语言解决人类无法读懂机器语言的问题指令代替二进制......