LeetCode题目链接
https://leetcode.cn/problems/remove-linked-list-elements/
https://leetcode.cn/problems/design-linked-list/
https://leetcode.cn/problems/reverse-linked-list/

题解
203.移除链表元素
重要的是创立头结点,这点在写题前已经经受过提示。
注意移除代码中pre结点创建后,在循环中会跟着head往下走,因此要再创建一个cur结点,并令其初值等于pre,而不是直接令其next等于head,因为在遍历过程中移动了next指针,头结点被删除后可能在cur的next里没被改变,因此要直接令其值等于pre,来改变其next。
其他的创建链表代码有借鉴AI的(实在是AI有提示,没办法)。

707.设计链表
借助AI的帮助下写了几行(不是很多),主要是在按下标添加结点时,index长度等于链表长度时调用了addAtTail(val),这点比较要注意,其他的只是模拟。

206.反转链表
在最后return环节那里,是AI给我提示的(没办法,AI太快了),脑中模拟一下就知道是pre返回,这回完全没看题解,都是凭之前的印象做出的,第一遍刷题真的有用!

代码

//203.移除链表元素
#include <iostream>
#include <vector>
using namespace std;struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}      ListNode(int x, ListNode *next) : val(x), next(next) {}
};class Solution {
public:ListNode* removeElements(ListNode* head, int val) {if(head == NULL) return NULL;ListNode* pre = new ListNode;pre->next = head;ListNode* cur = pre;while (head != NULL) {if (head->val == val) {pre->next = head->next;head = head->next;}else {pre = head;head = head->next;}}return cur->next;}
};ListNode* createList(vector<int> nums) {if (nums.size() == 0) return NULL;ListNode *pre = new ListNode;pre->next = NULL;ListNode* cur = pre;for (int i = 0;i < nums.size();i++) {cur->next = new ListNode(nums[i]);cur = cur->next;}cur->next = NULL;return pre->next;
}int main() {Solution s;vector<int> nums = {  };ListNode* head = createList(nums);int val = 1;ListNode* node = head;while (node != NULL) {printf("%d ", node->val);node = node->next;}printf("\n");ListNode* result = s.removeElements(head, val);node = result;while (node != NULL) {printf("%d ", node->val);node = node->next;}return 0;
}
//707.设计链表
#include <iostream>
using namespace std;class MyLinkedList {
public:struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}};;MyLinkedList() {preHead = new ListNode();}int getListLen() {ListNode* head = preHead->next;int len = -1;while (head != NULL) {len++;head = head->next;}return len;}int get(int index) {int len = getListLen();if (index < 0 || index > len) return -1;int num = -1;ListNode* head = preHead->next;while (head != NULL) {num++;if (num == index) {return head->val;}head = head->next;}return -1;}void addAtHead(int val) {ListNode* node = new ListNode(val);node->next = preHead->next;preHead->next = node;}void addAtTail(int val) {ListNode* pre = preHead;ListNode* head = preHead->next;while (head != NULL) {pre = head;head = head->next;}ListNode* node = new ListNode(val);pre->next = node;}void addAtIndex(int index, int val) {int len = getListLen() + 1;if (index > len) return;if (index == len) {addAtTail(val); //妙啊return;}ListNode* pre = preHead;ListNode* head = preHead->next;int num = -1;while (num < index - 1) {num++;pre = head;head = head->next;}ListNode* node = new ListNode(val);node->next = pre->next;pre->next = node;}void deleteAtIndex(int index) {int len = getListLen();if (index < 0 || index > len) return;ListNode* pre = preHead;ListNode* head = preHead->next;int num = 0;while (num < index) {pre = head;head = head->next;num++;}pre->next = head->next;delete head;}
private:ListNode* preHead;
};int main() {MyLinkedList myLinkedList;myLinkedList.addAtHead(1);myLinkedList.addAtTail(3);myLinkedList.addAtIndex(1, 2);    // 链表变为 1->2->3printf("%d\n", myLinkedList.get(1));              // 返回 2myLinkedList.deleteAtIndex(1);    // 现在,链表变为 1->3printf("%d\n", myLinkedList.get(1));              // 返回 3return 0;
}
//206.反转链表
#include <iostream>
#include <vector>
using namespace std;struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}};class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == NULL) return NULL;ListNode* pre = NULL;while (head != NULL) {ListNode* tmp = head->next;head->next = pre;pre = head;head = tmp;}return pre;}
};ListNode* createList(vector<int> nums) {if (nums.size() == 0) return NULL;ListNode* pre = new ListNode;pre->next = NULL;ListNode* cur = pre;for (int i = 0;i < nums.size();i++) {cur->next = new ListNode(nums[i]);cur = cur->next;}cur->next = NULL;return pre->next;
}int main() {vector<int> nums = {  };ListNode* head = createList(nums);ListNode* node = head;while (node != NULL) {printf("%d ", node->val);node = node->next;}printf("\n");Solution s;ListNode* result = s.reverseList(head);node = result;while (node != NULL) {printf("%d ", node->val);node = node->next;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921340.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921340.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921340.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CI/CD流水线驱动自动化流程深度解析:选型、竞品、成本与资源消耗

目录 一、CI/CD是什么&#xff1f;核心定位与价值 二、选型与竞品分析 (GitLab CI vs. Jenkins vs. GitHub Actions vs. GitLab CI) 三、部署成本分析 四、服务器资源消耗分析 五、给您的最终建议 一、CI/CD是什么&#xff1f;核心定位与价值 CI/CD&#xff08;持续集成/…

工厂办公环境如何实现一台服务器多人共享办公

在现代化工厂的办公环境中&#xff0c;如何通过一台服务器实现多人共享办公是一个既实用又高效的需求。这种方案不仅能降低硬件成本&#xff0c;还能简化IT管理&#xff0c;提高数据安全性。在工厂办公环境中&#xff0c;通过云飞云共享云桌面实现一台服务器多人共享办公&#…

系统性学习数据结构-第三讲-栈和队列

系统性学习数据结构-第三讲-栈和队列1. 栈1.1 栈和队列1.2 栈的实现2. 队列2.1 概念与结构2.2 队列的实现3. 栈和队列算法题3.1 [有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)3.2 [用队列实现栈](https://leetcode.cn/problems/implement-stack-…

硬件(三) 通信方式、串口通信

一、通信类型&#xff08;一&#xff09;并行通信多个比特通过并行线同时传输&#xff0c;传输速率快&#xff0c;但会大量占用芯片资源&#xff0c;在对资源敏感的场景下不太适用。&#xff08;二&#xff09;串行通信把数据拆成单个比特&#xff0c;按顺序在一根总线上发送。…

vsan default storage policy 具体是什么策略?

vSAN Default Storage Policy&#xff08;vSAN 默认存储策略&#xff09;是 VMware vSAN 部署后自动创建的基础存储策略&#xff0c;其核心目标是在“通用性”和“可靠性”之间取得平衡&#xff0c;为大多数虚拟机提供默认的数据保护和存储服务&#xff0c;无需管理员手动创建策…

雨后阳光为何更强烈?

1. 降雨后的辐射是否会增强一般来说&#xff0c;降雨时天空多云&#xff0c;云层对太阳辐射有强烈削弱作用&#xff0c;所以降雨时的短波辐射显著下降。但雨后&#xff0c;空气湿度大、颗粒物被冲刷、天空转晴时&#xff0c;大气透明度会提高&#xff0c;短波辐射相较于降雨前往…

美团发布 | LongCat-Flash最全解读,硬刚GPT-4.1、Kimi!

一、导读 本报告解析了美团LongCat团队推出的LongCat-Flash模型&#xff0c;一个拥有5600亿参数的混合专家模型&#xff08;Mixture-of-Experts, MoE&#xff09;。面对大规模语言模型在计算资源和效率上的挑战&#xff0c;LongCat-Flash旨在实现计算效率与高级智能体&#xf…

Ubuntu 18.04 上升级 gcc 到 9.4

18.04 默认的源中可能没有 GCC-9.3 或更新版本&#xff0c;在终端运行以下命令来添加 PPA&#xff1a; sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update2.安装 GCC 和 G sudo apt install gcc-9 g-93.更新替代版本 如果系统中安装了多个 GCC 版本&#x…

.NET GcPDF V8.2 新版本:人工智能 PDF 处理

一、GcPDF 产品简介 GcPDF&#xff08;GrapeCity Documents for PDF&#xff09;是葡萄城&#xff08;GrapeCity&#xff09;推出的一款功能强大的 .NET PDF 开发组件&#xff0c;旨在为开发人员提供高效、灵活的 PDF 文档处理解决方案。无论是创建全新 PDF 文档、编辑现有 PD…

解锁桐果云零代码数据平台能力矩阵——赋能零售行业数字化转型新动能

在零售行业从“规模扩张”转向“精细运营”的当下&#xff0c;数据已成为优化库存、精准营销、防控风险的核心抓手。但多数零售企业仍面临“数据杂乱难治理、分析建模门槛高、场景适配性不足”等难题&#xff0c;导致大量订单、商品、交易数据沉睡&#xff0c;难以转化为经营决…

rabbitmq 入门知识点

RabbitMQ 是一个 消息队列中间件&#xff08;Message Broker&#xff09;&#xff0c;实现了 AMQP 协议&#xff0c;常用于服务之间解耦、异步处理、流量削峰等场景。 我帮你分成两个部分来讲&#xff1a;核心原理 常见用法。&#x1f9e9; 一、核心原理 RabbitMQ 的核心是 生…

点控云智能客服:以AI重塑服务体验,登顶行业第一的革新之路

在数字化浪潮席卷全球的今天&#xff0c;客户服务已成为企业核心竞争力之一。智能客服作为连接企业与客户的重要桥梁&#xff0c;其效能与体验直接关系到企业的品牌形象与市场口碑。近日&#xff0c;权威机构发布的《中国智能客服市场竞争力报告》显示&#xff0c;点控云智能客…

9.5 IO-线程day5

信号量打印ABC#include <stdio.h> #include <string.h> #include <stdlib.h> #include <25061head.h> sem_t sem[1]; void *callback(void *arg) {while(1){sem_wait(&sem[0]);printf("A\n");sleep(1);sem_post(&sem[1]);}pthread_e…

老师如何高效收集学生学籍信息,完成收集工作?

开学的时光总是忙碌而充实&#xff0c;除了要热情地迎接新生、用心地备课&#xff0c;还有一件让人头疼不已的事情——学生学籍信息的收集。上学期开学&#xff0c;我承担起了收集班级新生信息的重任&#xff0c;满心以为提前准备好的纸质表格&#xff0c;在新生报到那天发给家…

JAVA层的权限与SELinux的关系

Java 层权限是应用程序级别的“门禁卡”&#xff0c;而 SELinux 是系统级别的“防火墙规则和强制访问控制”。即使你拥有进入大楼的“门禁卡”&#xff08;Java 权限&#xff09;&#xff0c;如果“防火墙规则”&#xff08;SELinux 策略&#xff09;不允许你的进程与目标服务或…

Screen 三步上手

好的&#xff0c;这是给同事的简洁版说明&#xff1a;Screen 三步上手 开新窗口&#xff1a;干活前先开个带名字的窗口&#xff0c;不怕断连。 screen -S 任务名看所有窗口&#xff1a;随时查看都有哪些任务在后台跑。 screen -ls重回窗口&#xff1a;断连后重新登录&#xff0…

flink 伪代码

import java.util.*; import java.util.concurrent.*;// 核心接口定义 interface StreamOperator {void open();void processElement(Object element);void close(); }interface SourceFunction extends StreamOperator {void run(SourceContext ctx); }interface SinkFunction…

一招快速识别你的电脑是机械硬盘还是固态硬盘

你是否经常觉得电脑开机慢、软件打开卡顿&#xff1f;其中一个关键原因&#xff0c;可能就在于你使用的是机械硬盘&#xff08;HDD&#xff09;还是固态硬盘&#xff08;SSD&#xff09;。固态硬盘读写速度快&#xff0c;能显著提升系统响应速度&#xff1b;而机械硬盘虽然容量…

52核心52线程,Intel下一代CPU憋了个大的

被逼急了的 Intel&#xff0c;可能正在憋大招&#xff01;如大伙儿所见&#xff0c;Intel 这两年日子已经不能用「惨」来形容。其过去引以为傲的 PC 处理器&#xff0c;特别是高性能桌面处理器领域&#xff0c;如今算是彻底被 AMD 打懵了。无他&#xff0c;己方产品是连年摆烂&…

【LeetCode 热题 100】1. 两数之和——(解法二)哈希表

Problem: 1. 两数之和 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N)空间复杂度&#xff1a;O(N)整体思路 这段代码旨在高效地解决 “两数之和” 问题。与 O(N^2) 的暴力枚举法相比&#xff0c;此版本采用了一种经典的 “空间换时间” 策略&#xff0c;利用 …