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

网站建设改版方案企业网站是什么

网站建设改版方案,企业网站是什么,做标书有什么好的网站吗,建立问答类的网站LeetCode 707. 设计链表 难度:middle\color{orange}{middle}middle 题目描述 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:valvalval 和 nextnextnext。valvalval 是当前节点的值,nextnextnext 是指向下…

LeetCode 707. 设计链表

难度:middle\color{orange}{middle}middle


题目描述

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

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

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

示例:

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

提示:

  • 0<=index,val<=10000 <= index, val <= 10000<=index,val<=1000
  • 请不要使用内置的 LinkedList 库。
  • getgetget, addAtHeadaddAtHeadaddAtHead, addAtTailaddAtTailaddAtTail, addAtIndexaddAtIndexaddAtIndexdeleteAtIndexdeleteAtIndexdeleteAtIndex 的操作次数不超过 200020002000

算法1

(单链表)

实现单向链表,即每个节点仅存储本身的值和后继节点。除此之外,我们还需要一个哨兵(sentinel)节点作为头节点,和一个 size 参数保存有效节点数。如下图所示。

在这里插入图片描述

复杂度分析

  • 时间复杂度O(n)O(n)O(n),初始化消耗 O(1)O(1)O(1)get 消耗 O(index)O(index)O(index)addAtHead 消耗 O(1)O(1)O(1)addAtTail 消耗 O(n)O(n)O(n),其中 n 为链表当前长度。

  • 空间复杂度 : 所有函数的单次调用空间复杂度均为 O(1)O(1)O(1),总体空间复杂度为 O(n)O(n)O(n)

C++ 代码

class MyLinkedList {
public:struct Node {int val;Node* next;Node(int _val): val(_val), next(NULL) {}}*head;MyLinkedList() {head = NULL;}int get(int index) {if (index < 0) return -1;auto p = head;for (int i = 0; i < index && p; i ++ ) p = p->next;if (!p) return -1;return p->val;}void addAtHead(int val) {auto cur = new Node(val);cur->next = head;head = cur;}void addAtTail(int val) {if (!head) head = new Node(val);else {auto p = head;while (p->next) p = p->next;p->next = new Node(val); }}void addAtIndex(int index, int val) {if (index <= 0) addAtHead(val);else {int len = 0;for (auto p = head; p; p = p->next) len ++ ;if (index == len) addAtTail(val);else if (index < len) {auto p = head;for (int i = 0; i < index - 1; i ++ ) p = p->next;auto cur = new Node(val);cur->next = p->next;p->next = cur;} }       }void deleteAtIndex(int index) {int len = 0;for (auto p = head; p; p = p->next) len ++ ;if (index >= 0 && index < len) {if (index == 0) head = head->next;else {auto p = head;for (int i = 0; i < index - 1; i ++ ) p = p->next;p->next = p->next->next;}}}
};/*** 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);*/


算法2

(双链表)

实现双向链表,即每个节点要存储本身的值,后继节点和前驱节点。除此之外,需要一个哨兵节点作为头节点 head 和一个哨兵节点作为尾节点 tail。仍需要一个 size 参数保存有效节点数。如下图所示。

在这里插入图片描述

复杂度分析

  • 时间复杂度O(n)O(n)O(n),初始化消耗 O(1)O(1)O(1)get 消耗 O(index)O(index)O(index)addAtHead 消耗 O(1)O(1)O(1)addAtTail 消耗 O(n)O(n)O(n),其中 n 为链表当前长度。

  • 空间复杂度 : 所有函数的单次调用空间复杂度均为 O(1)O(1)O(1),总体空间复杂度为 O(n)O(n)O(n)

C++ 代码

class MyLinkedList {
public://双链表struct Node {Node *left, *right;int val;Node(int _val) {val = _val;left = right = NULL;}}*head, *tail;//表示节点的个数int size;//初始化MyLinkedList() {size = 0;head = new Node(INT_MIN), tail = new Node(INT_MAX);head->right = tail;tail->left = head;}int get(int index) {if (index < 0 || index >= size)return -1;//找到第 index 个节点,head是虚拟节点,所以 i <= indexauto p = head;for (int i = 0; i <= index; i ++) p = p->right;return p->val;  }void addAtHead(int val) {auto t = new Node(val);size ++;t->right = head->right, head->right->left = t;t->left = head, head->right = t;}void addAtTail(int val) {auto t = new Node(val);size ++;tail->left->right = t, t->left = tail->left;t->right = tail, tail->left = t;}void addAtIndex(int index, int val) {if (index > size) return;else if (index == size) addAtTail(val);else if (index < 0) addAtHead(val);else {auto p = head;//在链表中的第 index 个节点之前添加值为 val  的节点,所以找到第 index-1 节点,在后面插入一个节点for (int i = 0; i < index; i ++)p = p->right;auto q = p->right;size ++;auto t = new Node(val);t->right = q, q->left = t;p->right = t, t->left = p;}}   void deleteAtIndex(int index) {if (index < 0 || index >= size) return;auto p = head;// p 是虚拟节点,p点是要删除的节点for (int i = 0; i <= index; i ++) p = p->right;size --;p->right->left = p->left;p->left->right = p->right;delete p;}
};/*** 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);*/
http://www.ysxn.cn/news/2601.html

相关文章:

  • 辛集网站建设哪家好时事新闻热点摘抄
  • 奉贤长沙网站建设网络平台有哪些
  • 做册子模板素材有哪些网站如何制作百度网页
  • 网络优化工程师能干一辈子吗菏泽seo
  • 哈尔滨企业网站建设公司品牌广告语
  • 做网站宣传百度关键词优化多久上首页
  • wordpress棋牌模板seo职位招聘
  • 网站正在建设代码百度权重域名
  • 小程序开发费用明细表苏州优化网站公司
  • 抗击疫情网页设计素材电脑系统优化软件排行榜
  • 西安seo排名扣费seo如何优化关键词
  • 做网站一定要后台嘛百度网页网址
  • wordpress多账号权限泰州seo排名扣费
  • 盗版小说网站怎么赚钱郑州外贸网站推广
  • 聊城网站建设推广南宁网站seo
  • 百度托管运营哪家好珠海百度seo
  • 我怎么打不开建设银行的网站西地那非片
  • 网站管理助手 phpmyadmin需要留电话号码的广告
  • 自己的电脑做网站当服务器使用关键词排名批量查询
  • 网站2级域名 还是子目录百度权重批量查询
  • 做一网站需要多少钱seo推广技术培训
  • 最火网页游戏排行榜seo关键词快速获得排名
  • 营销网站建设定制友情链接平台哪个好
  • 网站开发与推广方向今日头条新闻大事件
  • 建设银行网站明细多长时间百度关键字
  • 浅议我国旅游景点网站的建设武汉百度seo排名
  • 信息管理系统网站开发推广策划方案怎么写
  • 深圳seo博客深圳关键词推广整站优化
  • 商务网站规划与建设课设的项目需求seo手机优化软件哪个好用
  • 福建建设工程交易中心网站华与华营销策划公司