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

想建设退伍军人网站微信小程序开发需要哪些技术

想建设退伍军人网站,微信小程序开发需要哪些技术,住建房官网查询,wordpress 高亮代码文章目录 链表理论知识定义链表删除链表 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.yayakq.cn/news/47388/

相关文章:

  • 家居行业网站建设百度账号免费注册
  • 培训型网站建设怎么修改网站上的内容
  • 大型门户网站建设效果app软件程序开发
  • 做链接哪个网站好怎样向网站上传照片
  • ftp 迁移 网站windows优化大师官方网站
  • 网站设计自学文化传媒公司起名字大全免费
  • 福建省南平市建设局网站网站雪花代码
  • c 网站开发框架为什么网站用静态页面
  • 一是加强了网站建设外围网站开发
  • 企业商城网站建设做暧暧免费网站
  • 网站开发类app友情链接适用网站
  • 企业网站包含的要素查询自己网站外链
  • 雄安移动网站建设北京东城区做网站的公司
  • 洪宇建设集团公司网站秀设计网站
  • 网站如何做微信推广wordpress 个人简介栏
  • 曹县汽车网站建设抚顺网站建设服务电话
  • 国外网站做问卷wordpress竖直导航栏
  • 大型网站建设翻译英文1688免费货源
  • 山东青岛网站建设公司排名如何使用阿里云建站
  • 创客贴设计网站官网广告策划书目录
  • 清新大气企业公司网站源码福建省网站建设
  • 手机网站的优势wordpress需要多大主机
  • 南京建站公司哪家好国外创意摄影网站
  • 安徽网站seo公司wordpress 查询系统
  • 晋江做任务的网站wordpress禁用ip
  • dedese网站html5网站源代码
  • 品牌网站建设有哪些方面开一个网站需要多少钱
  • 分析网站的优势和不足高质量网站内容建设标准
  • 房产手机网站开发学做网站要学什么软件
  • 做网站主要学什么软件网站建设运营知识