当前位置: 首页 > 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.hkea.cn/news/783099/

相关文章:

  • 赤峰市做网站公司今日的最新消息
  • 上海最大的贸易公司seo网络推广机构
  • jsp 网站开发广告发布平台
  • b2c网站综合对比评价站长统计幸福宝
  • 网站建设意见做推广app赚钱的项目
  • 哈尔滨营销网站制作做外贸推广
  • 深圳网站建设外贸公司排名搜索热词排名
  • 网络科技公司招聘可靠吗seo多久可以学会
  • 企业网站建设的方案ppt网络营销的特点主要包括什么
  • 如何自行建设网站推广关键词优化
  • 建设学院网站百度收录关键词查询
  • 有关外贸的网站有哪些内容武汉抖音seo搜索
  • 娄底网站建设的话术深圳网站关键词排名优化
  • 福田大型商城网站建设seo营销方法
  • 网站开发专业就业指导企业网站设计与实现论文
  • 网络营销方式的思维导图seo关键词优化系统
  • wordpress访客ip记录福清市百度seo
  • 网站下载速度慢互联网广告推广公司
  • 电影网站空间配置网络营销的工具和方法有哪些
  • 包装设计网站免费百度seo搜索引擎优化厂家
  • 免费做公司网站sem对seo的影响有哪些
  • 网站空间购买费用关键词优化计划
  • 网站制作可以卖多少钱陕西网站建设制作
  • 深圳中小企业网站制作谷歌海外广告投放
  • 做游戏网站的需求分析创建app平台
  • 青岛胶南做网站的有多少seo商学院
  • 二月网站建设南宁百度个人中心登录
  • 如何在相关网站免费做宣传广告免费建立个人网站官网
  • 做搜狗网站优化首自己建立网站步骤
  • 企业资质查询官方网站最好的小说网站排名