707 设计单链表

第一次完成这样的设计,一路磕磕碰碰,遇到了许多问题,最后终于一一解决了。感恩https://blog.csdn.net/lym940928/article/details/81276658

题目如下:

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 nextval 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。

在链表类中实现这些功能:

  • get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1
  • addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
  • addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
  • addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val  的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。
  • deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。

下面是给的示例:

MyLinkedList linkedList = new MyLinkedList();  //创建链表
linkedList.addAtHead(1);      //在头节点加入元素1,链表变为1->nullptr
linkedList.addAtTail(3);      //在尾节点加入元素3,链表变为1->3->nullptr
linkedList.addAtIndex(1,2);   //链表变为1-> 2-> 3->nullptr
linkedList.get(1);            //返回2
linkedList.deleteAtIndex(1);  //现在链表是1-> 3->nullptr
linkedList.get(1);            //返回3
 class MyLinkedList {private: //声明一个链表的结构,单链表中有一个next的指针,一个val的值,还有一个声明节点的函数struct LinkNode{int val;LinkNode* next;LinkNode(int x):val(x), next(nullptr){}};int len;  //代表链表的长度LinkNode *head;//头指针 LinkNode *tail;//尾指针public:/**Initialize your data structure here*/MyLinkedList(){head=new LinkNode(0);  //初始化链表,头指针指向的元素为0,next为nullptrtail=head;len=0;}/** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */int get(int index){LinkNode *pCur;pCur=head;if(index>len) return -1;elsefor(int i=0;i<=index;i++)pCur=pCur->next;  return pCur->val;      }/** Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. */void addAtHead(int val){LinkNode *pCur=new LinkNode(val);pCur->next=head;head=pCur;len++; return;}/** Append a node of value val to the last element of the linked list. */void addAtTail(int val){LinkNode *pCur=new LinkNode(val);tail=head;if(tail->next!=nullptr)tail=tail->next; tail->next=pCur;pCur->next=nullptr;len++;return;             }/** Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is      greater than the length, the node will not be inserted. */void addAtIndex(int index,int val){if(index>len)return;LinkNode *pCur;LinkNode *add=new LinkNode(val);pCur=head;for(int i=0;i<index;i++)pCur=pCur->next;add->next=pCur->next;pCur->next=add;len++;return;}/** Delete the index-th node in the linked list, if the index is valid. */void deleteAtIndex(int index){if(index>=len) return;LinkNode *pCur;pCur=head;for(int i=0;i<index;i++)pCur=pCur->next;LinkNode *del = pCur->next;pCur->next = del->next;del->next = NULL;len--;return;}};

 

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

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

相关文章

选择开源项目什么最重要?

开发人员在决定是否使用某个开源项目时考虑到的最重要事项是什么&#xff1f;代码质量&#xff1f;安全性&#xff1f;好的文档&#xff1f;上述因素都很重要&#xff0c;但根据 Tidelift 和 The New Stack 的联合调查&#xff0c;控制着开源项目的开源许可证才是最需要考量的因…

leetcode 二进制求和 addBinary

题目描述&#xff1a; 给定两个二进制字符串&#xff0c;返回他们的和&#xff08;用二进制表示&#xff09;。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a "11", b "1" 输出: "100" 示例 2: 输入: a "1010", b…

居然不知道和的区别?

前言那年刚找工作那会&#xff0c;就碰到过这么一个简单的题目“&和&&的区别” 那时知识面窄&#xff0c;大概也就知道1.都是作为逻辑与的运算符。2.&&具有短路功能&#xff0c;计算出前者false&#xff0c;就不需计算后者的true or false。后来在微信群里…

两数之和,输入有序数组 leetcode C++

给定一个已按照升序排列 的有序数组&#xff0c;找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2&#xff0c;其中 index1 必须小于 index2。 说明: 返回的下标值&#xff08;index1 和 index2&#xff09;不是从零开始的。你可以假设每…

【DevOps进行时】自动化测试之单元测试

在DevOps建设中&#xff0c;主流的测试分层体系可以分为单元测试、接口测试和界面测试。Google曾提出一个经验法则&#xff1a;70%的小型测试&#xff0c;20%的中型测试&#xff0c;10%大型测试。当然&#xff0c;这个比例不是确定的&#xff0c;不同类型的项目&#xff0c;测试…

反转字符串中的单词 III leetcode

给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Lets take LeetCode contest" 输出: "steL ekat edoCteeL tsetnoc" 注意&#xff1a;在字符串中&#xff0c;每个单词由单…

Zongsoft.Data 发布公告

很高兴我们的 ORM 数据访问框架(Zongsoft.Data)在历经两个 SaaS 产品的应用之后&#xff0c;今天正式宣布对外推广。它是一个类 GraphQL 风格的 ORM(Object/Relational Mapping) 数据访问框架。又一个轮子&#xff1f;在很长时间里&#xff0c;.NET 阵营似乎一直缺乏一个被普遍…

leetcode 旋转数组

给定一个数组&#xff0c;将数组中的元素向右移动 k 个位置&#xff0c;其中 k 是非负数。 示例 1:输入: [1,2,3,4,5,6,7] 和 k 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2…

使用 .NET Core模板引擎创建自定义的模板和项目

本文要点.NET CLI 包含了一个模板引擎&#xff0c;它可以直接利用命令行创建新项目和项目项。这就是“dotnet new”命令。默认模板集涵盖了默认控制台和基于 ASP.NET 的应用程序以及测试项目所需的基本项目和文件类型。自定义模板可以创建更加有趣或定制化的项目和项目项&#…

leetcode 岛屿的个数

给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010…

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

时间真快&#xff0c;转眼今年又要过去了。回想今年&#xff0c;依次开源发布了Colder.Fx.Net.AdminLTE(254Star)、Colder.Fx.Core.AdminLTE(335Star)、DotNettySocket(82Star)、IdHelper(47Star)&#xff0c;这些框架及组件都是本着以实际出发&#xff0c;实事求是的态度&…

leetcode 两数相加

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储&#xff0c;它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例&#xff1a; 输入&#xff1a;(2 -> 4 -> 3) (5 ->…

.Net开发3年,应聘大厂惨遭淘汰,如何翻身打脸面试官?

(设计师忘记了&#xff0c;这里还有个双十一福利课&#xff0c;还能1元秒杀&#xff01;)

leetcode 无重复字符的最长子串

给定一个字符串&#xff0c;找出不含有重复字符的最长子串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc"&#xff0c;其长度为 3。示例 2: 输入: "bbbbb" 输出: 1 解释: 无重复字符的最长子串是 "b&q…

面对金九银十铜十一你真的准备好了吗?

作者&#xff1a;回首笑人间&#xff0c;高级Java工程师一枚&#xff0c;热爱研究开源技术&#xff0c;架构师社区合伙人&#xff01;前言&#xff1a;又是一年一度的金九银十跳槽季&#xff0c;回首在经历了半个月的求职奔波后&#xff0c;终于又能安稳的静下心来敲代码了&…

深入理解二叉搜索树

什么是二叉搜索树&#xff1f; 顾名思义&#xff0c;一颗二叉搜索树是基于二叉树来组织的&#xff0c;它包括许多动态集合操作&#xff08;Search&#xff0c;MiniNum, MaxiNum, Prodecessor, Successor, Insert 和Delete等&#xff09;。二叉搜索树上的基本操作所花费的时间与…

深入理解堆(最大堆,最小堆及堆排序)

基本概念&#xff1a; 1、完全二叉树&#xff1a;若二叉树的深度为h&#xff0c;则除第h层外&#xff0c;其他层的结点全部达到最大值&#xff0c;且第h层的所有结点都集中在左子树。 2、满二叉树&#xff1a;满二叉树是一种特殊的的完全二叉树&#xff0c;所有层的结点都是最…

区块链的实质与真伪

2019年11月03日&#xff0c;应邀在微信群未名大学堂进行了区块链技术及应用的音频讲座。里面提到了区块链技术的原型与起源等内容&#xff0c;当时群内的介绍信息如下&#xff08;仅供参考&#xff09;&#xff1a;未名大学堂首期讲座讲座题目&#xff1a;区块链技术和应用浅析…

H.266/VVC

Versatile Video Coding (VVC) 相关网址 https://jvet.hhi.fraunhofer.de/svn/svn_VVCSoftware_VTM/ https://jvet.hhi.fraunhofer.de/ http://phenix.it-sudparis.eu/jvet/

王炸吐血整理60个Redis面试题,全网最全了

1.Redis 是一个基于内存的高性能key-value数据库。 2.Redis相比memcached有哪些优势&#xff1a; memcached所有的值均是简单的字符串&#xff0c;redis作为其替代者&#xff0c;支持更为丰富的数据类型redis的速度比memcached快很多redis可以持久化其数据3.Redis是单线程 redi…