代码随想录算法训练营第四天 | 24.两辆交换链表中的节点

news/2024/9/26 6:45:33

23.两两交换链表中的两个节点

题目链接 文章讲解 视频讲解

  • 时间复杂度 o(n)
  • 空间复杂度 o(1)

tips: 画图,并将每一步操作用伪代码写出来,然后将代码理顺可以避免修改代码的麻烦
初始化的时候就要将previous初始化为current的前一个节点,这样可以保证循环的第一步满足循环要求

class Solution {
public:ListNode* swapPairs(ListNode* head) {// 定义虚拟头节点ListNode * dummy = new ListNode();dummy->next = head;// 初始化current指向第一个节点也就是头节点,previous指向current的前一个节点ListNode * current = head, * previous = dummy;// 如果current不为空执行循环while(current) {// 定义一个节点保存带交换的两个节点的前一个节点ListNode * temp = previous;// previous指向带交换的两个节点中第一个节点previous = current;// 如果current的下一个节点不为空,那么current指向待交换的两个节点中第二个节点if(current->next) {current = current -> next;// 交换两个节点previous->next = current->next;current->next = previous;temp->next = current;} else {// 如果current的下一个节点为空那么只有一个待交换节点,此时返回return dummy->next;}// current指向下一组待交换的两个节点中的第一个节点current = previous->next;}return dummy->next;}
};

19.删除链表的倒数第N个节点

题目链接 文章讲解 视频讲解

tips: 这里再删除的时候不需要判断slow是否为空因为最开始的时候slow指向dummy,slow->next指向head,两者都不为空,在有fast作为先导的情况下,slow不可能为空,slow的next也不可能为空

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode * dummy = new ListNode;dummy->next = head;ListNode * fast = dummy;ListNode * slow = dummy;while(n-- && fast) fast = fast->next;while(fast->next) {       // 慢指针出发fast = fast->next;slow = slow->next;}ListNode *temp = slow->next;slow->next = slow->next->next;delete temp;return dummy->next;}
};

面试题02.07链表相交

题目链接 文章链接

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode * curr_a = headA, * curr_b = headB;while(curr_a != curr_b) {if(curr_a) {curr_a = curr_a->next;} else {curr_a = headB;}if(curr_b) {curr_b = curr_b->next;} else {curr_b = headA;}}return curr_a;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

CSRF(原理)

CSRF是什么?Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概…

XXE漏洞(Pikachu)

原理 要补好多知识~XXE漏洞全称XML External Entity Injection 即XML外部实体注入。 XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。 XXE漏洞触发…

平均汇总(Power Pivot)

问题:如何在数据透视表中显示类似列总计的平均汇总?解决:在数据模型中添加列Dax公式:=SUMX(区域,区域[数量]*(区域[物料编码]=earlier(区域[物料编码])))/distinctcount(区域[日期 (月)])数据透视表布局: 行字段:物料编码、平均 列字段:组后为月的日期 值字段:数量 其他…

基于webapi的websocket聊天室(三)

上一篇处理了超长消息的问题。我们的应用到目前为止还是单聊天室,这一篇就要处理的多聊天室的问题。 思路第一个问题,怎么访问不同聊天室这个可以采用路由参数来解决。我把路由设计成这样/chat/{room}。访问不同路径就代表进入不同聊天室。第二个问题,怎么创建不同的聊天室原…

越权漏洞(Pikachu)

原理 该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不…

同单元格内计算加号个数

问题:一个单元格内若干个加号,计算其个数 函数公式解决:传统套路 =LEN(A2)-LEN(SUBSTITUTE(A2,"+",)) 新套路 =COUNTA(TEXTSPLIT(A2,"+"))-1 正则套路 =COUNTA(REGEXP(A2,"[^+]"))-1

rdp利用技巧总结

近期在项目中管理员在rdp挂载之后搞掉了管理员,想着有时间就整理下针对rdp的利用方法。针对挂盘的利用方法复制文件这个不多说,可以根据的不同的挂盘来决定是拖文件还是放启动项。有一些自动文件监控和拷贝的应用,如:https://github.com/cnucky/DarkGuardianDarkGuardian是一…

小小redis持久化,拿捏

前言 我们先来说说什么是持久化持久化顾名思义就是数据长久保存,Redis为什么需要持久化呢,好呆的问题,Redis数据是存储在内存中的,内存数据的特点就是一旦重启就什么都没了我们将文件由内存中保存到硬盘中的这个过程,我们叫做数据保存,也就叫做持久化。但是把它保存下来不…