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

淘客网站开发公司已备案域名购买平台

淘客网站开发公司,已备案域名购买平台,网站制作推荐新鸿儒,上海ktv最新通知文章目录 链表理论知识定义链表删除链表 Leetcode203 移除链表元素代码实现 Leetcode707 设计链表代码实现复杂度分析错误点 Leetcode206 反转链表新建链表双指针法 链表理论知识 链接: https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.h…

文章目录

    • 链表理论知识
        • 定义链表
        • 删除链表
    • Leetcode203 移除链表元素
        • 代码实现
    • Leetcode707 设计链表
        • 代码实现
        • 复杂度分析
        • 错误点
    • Leetcode206 反转链表
        • 新建链表
        • 双指针法

链表理论知识

链接: https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E9%93%BE%E8%A1%A8%E7%9A%84%E7%B1%BB%E5%9E%8B

定义链表
// 单链表的节点定义
struct ListNode {int data;  // 节点上存储的元素ListNode *next;  // 指向下一个节点的指针ListNode(int val) : data(val), next(nullptr) {}  // 节点的构造函数
};// 双链表的节点定义
struct DoublyLinkedListNode {int data;DoublyLinkedListNode  * prev;DoublyLinkedListNode  * next;DoublyLinkedListNode(int val): data(val), prev(nullptr), next(nullptr) {}
};// 新建一个节点
ListNode* head = new ListNode(5);
删除链表

需手动释放这个D节点,释放这块内存
链表的增添和删除都是O(1)操作,也不会影响到其他节点. 如果删除最后一个节点,需要从头节点查找到第四个节点通过next指针进行删除操作,查找的时间复杂度是O(n)

// 删除头节点
ListNode * tmp = head;
head = head->next;
delete tmp;

Leetcode203 移除链表元素

链接: https://leetcode.cn/problems/remove-linked-list-elements/description/

代码实现
ListNode* removeElements(ListNode* head, int val) {// 循环删除满足要求的头节点while (head != nullptr && head->val == val) {ListNode * tmp = head;head = head->next;delete tmp;}ListNode* current_node = head;// 该循环内已经包含了最后一个节点需要删除的情况while (current_node != nullptr && current_node->next != nullptr) {if (current_node->next->val == val) {ListNode* tmp = current_node->next;current_node->next = current_node->next->next;delete tmp;} else {current_node = current_node->next;}}return head;
}

Leetcode707 设计链表

链接: https://leetcode.cn/problems/design-linked-list/description/

代码实现
class MyLinkedList {
public:struct ListNode {int val;ListNode * next;ListNode(int data): val(data), next(nullptr) {}};MyLinkedList() {}int get(int index) {if (index >= size_ || index < 0) {return -1;}ListNode* current_node = head_;while (index-- > 0) {current_node = current_node->next;}return current_node->val;}void addAtHead(int val) {ListNode * new_node = new ListNode(val);new_node->next = head_;head_ = new_node;size_++;}void addAtTail(int val) {ListNode * current_node = head_;if (current_node == nullptr) {addAtHead(val);return;}while (current_node->next != nullptr) {current_node = current_node->next;}ListNode * new_node = new ListNode(val);current_node->next = new_node;size_++;}void addAtIndex(int index, int val) {if (index > size_ || index < 0) {return;}if (head_ == nullptr || index == 0) {addAtHead(val);return;}ListNode * current_node = head_;while (--index > 0) {current_node = current_node->next;}ListNode * new_node = new ListNode(val);new_node->next = current_node->next;current_node->next = new_node;size_++;}void deleteAtIndex(int index) {if (index < 0 || index >= size_) {return;}if (index == 0) {ListNode * tmp = head_;head_ = head_->next;delete tmp;} else {ListNode *  current_node = head_;while (--index > 0) {current_node = current_node->next;}ListNode * tmp = current_node->next;current_node->next = current_node->next->next;delete tmp;}size_--;}// 打印链表void printList() const {ListNode* temp = head_;while (temp != nullptr) {std::cout << temp->val << " <-> ";temp = temp->next;}std::cout << "nullptr" << std::endl;}private:ListNode * head_{nullptr};int size_{0};
};/*** 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);*/
复杂度分析

时间复杂度:初始化消耗 O(1),get 消耗 O(index),addAtHead 消耗 O(1),addAtTail 消耗 O(n),其中 n 为链表当前长度,即 addAtHead,addAtTail 和 addAtIndex 已调用次数之和,addAtIndex 消耗 O(index)。

空间复杂度:所有函数的单次调用空间复杂度均为 O(1),总体空间复杂度为 O(n),其中 n 为 addAtHead,addAtTail 和 addAtIndex 调用次数之和。

错误点
  1. 在调用addAtIndex函数时, 多次向头部插入时出错, 除判断head_ == nullptr外还需要判断index == 0
  2. 插入和删除的while循环条件和get中的条件不同

Leetcode206 反转链表

链接: https://leetcode.cn/problems/reverse-linked-list/description/
代码随想录解析: https://programmercarl.com/0206.%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8.html#%E6%80%9D%E8%B7%AF
时间复杂度: O(N)
空间复杂度: O(1)

新建链表

会造成内存浪费

双指针法

需特别注意, 在初始化prev和cur指针后, 需将prev->next更新为nullptr, 避免循环嵌套

ListNode* reverseList(ListNode* head) {if (head == nullptr || head->next == nullptr) {return head;}ListNode * prev = head;ListNode * cur = head->next;prev->next = nullptr;while (cur != nullptr) {ListNode * tmp = cur->next;cur->next = prev;prev = cur;cur = tmp;}return prev;
}
http://www.hkea.cn/news/7714/

相关文章:

  • 网站首页的布局设计百度贴吧热线客服24小时
  • 简述网站开发过程网站收录优化
  • 微网站建设包括哪些方面百度云搜索引擎入口盘搜搜
  • 外管局网站上做预收登记aso优化什么意思是
  • 淳安网站建设百度有哪些产品
  • 论文网站的负载测试是如何做的如何优化网站排名
  • 做外贸业务员需要什么条件seo的收费标准
  • 域名备案和网站备案的区别常州网站优化
  • 个人养老保险金怎么交优化百度seo技术搜索引擎
  • 信息安全网站建设方案书除了百度指数还有哪些指数
  • 尺寸在线做图网站官网seo
  • 和网站建设签合同小红书seo
  • 泉州网站设计哪家公司好google search
  • 四川网站建设广元分公司口碑营销案例简短
  • 儿童教育 php模板 网站今天发生的新闻
  • 广州网站公司制作网站seo 优化 服务
  • 一般在什么网站上做电子请帖百度竞价排名系统
  • 网站如何申请微信支付网页设计大作业
  • 中企动力做的保安服务网站百度搜索推广开户
  • 装修公司做宣传在哪个网站什么平台可以做引流推广
  • 怎么样做团购网站2021关键词搜索排行
  • 营销型外贸网站广州全国疫情最新消息
  • 网站建设相关小论文seo入门培训教程
  • ASP动态网站编程与应用网络媒体发稿平台
  • 阳泉那有做网站的营销推广案例
  • 拉萨网站开发什么是seo教程
  • 手机靓号网站建设google引擎免费入口
  • 网站内网页标题对百度排名百度网盘资源链接入口
  • 如何给一个公司做网站免费站推广网站不用下载
  • 公司网站二维码怎么做的推广计划方案