首页 > 其他分享 >代码随想录:设计链表

代码随想录:设计链表

时间:2024-11-18 23:19:12浏览次数:1  
标签:index target virtHead int 代码 随想录 next 链表 LinkNode

代码随想录:设计链表

这题遇到的问题是,在private中声明后,在构造函数中初始化的时候又声明了一次,大类的构造函数和结构体的构造函数弄晕掉了。

另外虚头节点是真好用,以后记得用。

一开始写成了这样:

class MyLinkedList {
public:
    struct LinkNode {
        int value;
        LinkNode* next;
    };
    
    MyLinkedList() {
		    LinkNode* virtHead = new LinkNode();
		    virtHead->value = 0;
		    virtHead->next = NULL;

    _size = 0;
    }
    
    省略
private:
    int _size;
    LinkNode* virtHead;
};

正确代码如下:

class MyLinkedList {
public:
    struct LinkNode {
        int value;
        LinkNode* next;
    };

    MyLinkedList() {
        virtHead = new LinkNode();
        virtHead->value = 0;
        virtHead->next = NULL;

        _size = 0;
    }

    int get(int index) {
        // 遍历链表,找到下标为index的节点
        if (index > _size - 1 || index < 0) {
            return -1;
        }
        LinkNode* target = virtHead;
        for (int i = 0; i < index + 1; i++) {
            target = target->next;
        }
        return target->value;
    }

    void addAtHead(int val) {
        LinkNode* insertNode = new LinkNode();
        insertNode->value = val;
        insertNode->next = virtHead->next;
        virtHead->next = insertNode;
        _size++;
    }

    void addAtTail(int val) {
        LinkNode* insertNode = new LinkNode();
        insertNode->value = val;
        insertNode->next = NULL;

        LinkNode* target = virtHead;
        while (target->next != NULL) {
            target = target->next;
        }

        target->next = insertNode;
        _size++;
    }

    void addAtIndex(int index, int val) {
        LinkNode* target = virtHead;
        if (index > _size) {
        } else {
            for (int i = 0; i < index; i++) {
                target = target->next;
            }

            LinkNode* insertNode = new LinkNode();
            insertNode->value = val;
            insertNode->next = target->next;

            target->next = insertNode;
            _size++;
        }
    }

    void deleteAtIndex(int index) {
        if (index > _size - 1 || index < 0) {
        } else {
            LinkNode* target = virtHead;
            for (int i = 0; i < index; i++) {
                target = target->next;
            }
            target->next = target->next->next;
            _size--;
        }
    }

private:
    int _size;
    LinkNode* virtHead;
};

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList* obj = new MyLinkedList();
 * int param_1 = obj->get(index);
 * obj->addAtHead(val);
 * obj->addAtTail(val);
 * obj->addAtIndex(index,val);
 * obj->deleteAtIndex(index);
 */

标签:index,target,virtHead,int,代码,随想录,next,链表,LinkNode
From: https://www.cnblogs.com/huigugu/p/18553986

相关文章

  • springboot美容院管理系统(代码+数据库+LW)
    摘  要如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让美容院信息的管理模式进行升级,也为了更好的维护美容院信息,美容院管理系统的开发运用就显得很有必要。并且通过开发美容院管理系统,不仅可以让所学的SpringBoot框架得到实际运用......
  • 基于springboot的“衣依”服装销售平台的设计与实现(代码+数据库+LW)
    摘要随着信息互联网购物的飞速发展,一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了“衣依”服装销售平台的开发全过程。通过分析企业对于“衣依”服装销售平台的需求,创建了一个计算机管理“衣依”服装销售平台的方案。文章介绍了“衣依”服装销售平台的系统......
  • AI 驱动低代码平台:开创智能化用户体验新纪元
    一、引言        人工智能技术如汹涌浪潮般迅猛发展,在各个行业掀起了颠覆性的变革风暴。于软件开发领域而言,AI辅助编程与低代码平台的完美结合已然成为关键趋势,极大地提高了开发效率。然而,低代码平台的使命绝非仅仅局限于简化开发流程,其更深远的目标在于打造出高度智......
  • 恶意代码分析入门--静态分析(chapter1_Lab01-01)
    恶意代码分析-工具收集-17bdw-博客园(cnblogs.com)实验环境:Lab1-1这个实验使用Lab01-01.exe和Lab01-01.dll文件,使用本章描述的工具和技术来获取关于这些文件的信息。操作环境操作场景:windowsxpsp3实验工具:PEiDv0.95Strings(新工具-在cmd窗口运行打印出目......
  • 计算机毕设项目源代码 - jsp+ssm汽车试驾预约系统
    一、项目介绍《汽车试驾预约系统》该系统基于B/S架构,即所谓浏览器/服务器模式,应用jsp+SSM框架技术,选择MySQL作为后台数据库,项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等。开发语言:Java 框架:ssm 技术:JSP  数据库:mysql5.7......
  • 计算机毕设项目源代码 - jsp+ssm跑腿网站
    一、项目介绍《跑腿网站》该系统基于B/S架构,即所谓浏览器/服务器模式,应用jsp+SSM框架技术,选择MySQL作为后台数据库,项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等。开发语言:Java 框架:ssm 技术:JSP  数据库:mysql5.7 数据库......
  • 代码随想录算法训练营第七天(LeetCode454.四数相加Ⅱ;LeetCode383.赎金信;LeetCode15.三
    LeetCode454.四数相加Ⅱ题目链接:四数相加Ⅱ题目链接思路这道题目给定我们四个数组,让我们判断从四个数组中分别取一个元素,然后将这四个元素相加,值为0的元组个数,所以我们可以模仿两数之和,因为四个数组中分别取元素就是任意取,不需要考虑去重的问题,所以可以将四个数组转......
  • 代码随想录算法训练营第八天(LeetCode344.反转字符串;LeetCode541.反转字符串Ⅱ;卡码网54
    LeetCode344.反转字符串题目链接:反转字符串题目链接思路这道题目让我们进行字符串的反转,其实直接使用reverse相关的函数就可以解决问题。但是解决问题的时候,如果这道题目使用库函数就可以直接解决,就最好不要使用库函数;如果库函数只是题目中解法的一小步,那么就使用......
  • 基于Select模型的通信仿真--win32编程代码
    目录基于Select模型的通信仿真--win32编程代码编程环境服务端客户端基于Select模型的通信仿真--win32编程代码编程环境VisualC++6.0服务端#include<stdio.h>#include<string.h>#include<WinSock2.h>#pragmacomment(lib,"ws2_32.lib")intAPIENTRYWinMain(HINSTANCEh......
  • 常用代码模板4——数学知识
    算法基础课相关代码模板 试除法判定质数——模板题luogu866.试除法判定质数boolis_prime(intx){if(x<2)returnfalse;for(inti=2;i<=x/i;i++)if(x%i==0)returnfalse;returntrue;}试除法分解质因数......