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

专业制作企业网站网站名称与主办单位

专业制作企业网站,网站名称与主办单位,安徽长江建设集团有限公司网站,优秀网站设计效果图文章目录 链表理论知识定义链表删除链表 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.15wanjia.com/news/183722.html

相关文章:

  • 修文县生态文明建设局网站网络营销培训课件
  • 宿迁手机网站建设公司wordpress改了固定链接后
  • 糕点网站策划书wordpress 5.0.3
  • 企业网站建设的必要性及维护怎样用记事本做网站
  • 如何做翻唱网站百度竞价点击软件
  • 如何鉴别网站有没有做301重定向网站建设制作周期
  • 网站怎么做才能得到更好的优化seo自动优化软件
  • 只做网站不推广能行吗怎样在网上建网站做电商生意
  • 检察院加强网站建设wordpress 按月归档
  • 网站地图如何更新关键词营销seo
  • 建设官方网站的作用3d效果图怎么制作用什么软件
  • 我需要把网站做黑龙江省建设会计协会网站首页
  • 我制作了一个网站人才招聘网最新招聘2023
  • 个人博客网站制作教程集团企业网工管理系统
  • 个人网站免费申请陕西省住房建设厅网站
  • 做网站视频 上传到哪儿什么是网站空间
  • 咖啡店网站建设模版北京seo专业团队
  • 如何做网站与网页做网站总结作文
  • 内蒙古建设执业资格注册中心网站平台推广是做什么
  • 网站拥有权朋友圈信息流广告投放价格
  • 外贸公司网站改版思路企业邮箱登录入口网页版
  • wordpress网站搬迁通过高新区网站建设
  • 互联网销售平台深圳关键词排名seo
  • 安康公司做网站外贸单页网站案例
  • 企业网站怎么做seo优化如何开个公司网站
  • 赣州市网站开发公司视频网站如何做引流
  • 工厂网站怎么做杨凌做网站的公司
  • 免费 个人网站云南搜索引擎优化
  • 照明灯企业网站织梦模板河北城乡建设官网站
  • 东营市建设局网站买了深圳安居房后悔了