当前位置: 首页 > news >正文

南京网站设计个人咸阳免费做网站公司

南京网站设计个人,咸阳免费做网站公司,潍坊百姓网免费发布信息网,网站建设推荐题目: 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节…

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

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

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

示例:

MyLinkedList linkedList = new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2); //链表变为1-> 2-> 3
linkedList.get(1); //返回2
linkedList.deleteAtIndex(1); //现在链表是1-> 3
linkedList.get(1); //返回3

思路:创建MyLinkedList 类,在类中创建ListNode 结构体,结构体中创建两个成员变量,并创建初始化的构造函数,创建成员变量size和哨兵节点,在MyLinkedList构造函数中初始化size和哨兵节点,在删除元素时,应该找到删除索引位置的前一个位置,再删除元素。
代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class MyLinkedList {
public://定义链表结点结构体struct ListNode {int val;//结构体的成员变量:整数类型的valListNode* next;//结构体的成员变量:指向另一个ListNode对象的指针next//用于初始化节点的值和指向下一个节点的指针,这个构造函数在创建新结点时被调用,// 从而避免了在创建新节点后手动初始化节点的值和指针ListNode(int val) :val(val), next(nullptr) {}};//初始化链表MyLinkedList() {_size = 0;//初始化为一个ListNode对象,并且该节点的val成员变量被设置为0//用于表示虚拟头节点的默认值_dummyHead = new ListNode(0);}//使用尾插法先插入元素void addAtTail(int val) {//创建一个新节点ListNode* newNode = new ListNode(val);//从虚拟头节点开始遍历,找到链表的最后一个节点ListNode* curr = _dummyHead;while (curr->next) {curr = curr->next;}curr->next = newNode;_size++;//更新链表的大小}//获取到第index个节点数值,如果index是非法数值直接返回-1, //注意index是从0开始的,第0个节点就是头结点int get(int index) {if (index>_size-1||_size<0) {return -1;}ListNode* cur = _dummyHead->next;while (index) { cur = cur->next;index--;}return cur->val;}//在链表最前面插入一个节点,插入完成后,新插入的节点为链表的新的头节点void addAtHead(int val) {ListNode* NewNode = new ListNode(val);NewNode->next = _dummyHead->next;_dummyHead->next = NewNode;_size++;}// 在第index个节点之前插入一个新节点,例如index为0,// 那么新插入的节点为链表的新头节点。// 如果index 等于链表的长度,则说明是新插入的节点为链表的尾结点// 如果index大于链表的长度,则返回空// 如果index小于0,则在头部插入节点void addAtIndex(int index,int val) {if (index > _size)return;if (index < 0)index = 0;ListNode* newNode = new ListNode(val);ListNode* cur = _dummyHead;while (index) {cur = cur->next;index--;}newNode->next = cur->next;cur->next = newNode;_size++;}// 删除第index个节点,如果index 大于等于链表的长度,直接return,//注意index是从0开始的void deleteAtIndex(int index) {if (index >= _size||index<0)return;ListNode* cur = _dummyHead;while (index) {cur = cur->next;index--;}ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;_size--;}void printl() {ListNode* cur = _dummyHead->next;while (cur) {cout << cur->val << "->";cur = cur->next;}cout << "NULL" << endl;cout <<"总元素个数为:" << _size;}
private:int _size;ListNode* _dummyHead;
};
int main() {MyLinkedList linkedList;linkedList.addAtTail(100);linkedList.addAtTail(200);linkedList.addAtTail(300);linkedList.addAtHead(66);linkedList.addAtIndex(1, 88);linkedList.deleteAtIndex(3);linkedList.printl();return 0;
}
http://www.yayakq.cn/news/144502/

相关文章:

  • 微软做网站采购信息网
  • 网站设计品郑州 高端网站建设
  • 网站排行首页怎么做安卓 wordpress 源码分析
  • 厦门网站建设h5微信oa系统
  • 素材网站设计模板深圳深圳网站建设
  • 企业网站.net计算机网站建设论文
  • 网站改版收费成都专业网站建设优化团队
  • 广东建科建设监理有限公司网站凡科能上传自己做的网站
  • 隆尧建设局网站学生做的动漫网站
  • 手机零售网站 关键词网站构建器
  • 自己创建网站403广州网站建设484186
  • 网站建设网络推广图片wordpress 漂浮广告
  • 模板建站和定制网站的对比网站建设什么价格
  • 网站带后台做视频网站要什么
  • asp网站后台编辑器用dw做的网页如何上传到网站
  • 贵州省铜仁市住房和城乡建设局网站网站开发表格
  • 上海网站排名seo公司宿迁网络公司
  • 用wordpress做的网站公益网站设计
  • 网站备案归哪里管wordpress英文模板
  • 北京朝阳区做网站企业网站适合响应式嘛
  • 福州网站建设 网络服务jsp网站建设项目实战电子版
  • 网站开发要求wordpress做新闻cms
  • 爱名网做网站教程深圳知名网站
  • 剑三做月饼活动网站网站建设外包费用
  • 哈尔滨手机网站建设价格低郑州遗像制作
  • 聊城网站建设策划建设公司网站开发之美 pdf
  • 微软云怎么做网站wordpress列表图片alt属性
  • 引擎网站推广法怎么做企业网站的建立联系方式
  • 18芯城网站开发案例网址跳转网站
  • 建设带数据搜索的网站土地 水利 勘测设计 公司宣传册设计样本