day4 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ●160 链表相交 ● 142.环形链表II

news/2024/11/16 19:49:36/
  1. 两两交换链表中的节点
    链表的指针,要仔细画图,搞清楚cur和cur的next在哪里
    这个题还是有点绕的,两两一组交换,还有奇偶数要考虑
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummyhead = new ListNode(0);dummyhead -> next = head;ListNode* cur = dummyhead;while(cur -> next != NULL  && cur -> next -> next != NULL) {ListNode* tmp = cur -> next;ListNode* tmp1 = cur -> next -> next -> next;cur -> next = cur -> next -> next;cur -> next -> next = tmp;tmp -> next = tmp1;cur = cur -> next -> next;}return dummyhead -> next;}
};

19.删除链表的倒数第N个节点
这个题又用到了快慢指针,快指针先走N+1步,然后快慢一起走到NULL,刚好慢指针就是倒数第N+1个
删除操作的时候,cur要放到被删除的前一个

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyhead = new ListNode(0);ListNode* fast = dummyhead;ListNode* slow = dummyhead;dummyhead -> next = head;while(n-- && fast != NULL) {fast = fast -> next;}fast = fast -> next;while(fast != NULL) {fast = fast -> next;slow = slow -> next;}slow -> next = slow -> next -> next;return dummyhead -> next;}
};

160 链表相交
这个题题意不好理解,
如果已经是相交的链表,结尾对齐以后,如果有完全一样的节点,后面的节点都是同一个next,一定是相交的
判断节点的时候是节点本身相等,不是值相等
距离之和一样的思路也很巧妙,在两趟以内一定会相交

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {//注意审题,题目给出的链表如果是相交的,那就已经相交了,不用你再制造成相交//路径a+b+c相等,是巧妙的方法//用直观方法推理,只要结尾长度相等了,有了相等的节点,那就说明从这个完全相同的节点以后,剩下的都相等了,从这个完全相同的节点以后,剩下的节点只有一个next//题目的终极目的,本身就是为了找到两个完全相同的节点,而且是最前面出现的ListNode* curA = headA;ListNode* curB = headB;while (curA != curB) {if(curA == NULL) {curA = headB;}else curA = curA -> next;if(curB == NULL) {curB = headA;}else curB = curB -> next;}return curA;}
};

142.环形链表II
这个题看着解析基本理解了
数学的方法是技巧很强的
环形链表也用到了快慢指针
思路不好想,不熟练

class Solution {
public:ListNode *detectCycle(ListNode *head) {ListNode* fast = head;ListNode* slow = head;while(fast != NULL && fast -> next != NULL) {fast = fast -> next -> next;slow = slow -> next;if (fast == slow){ListNode* index1 = fast;ListNode* index2 = head;while(index1 != index2) {index1 = index1 -> next;index2 = index2 -> next;}return index1;}}return NULL;}
};

链表到此结束了,以后还要多练,现在感觉比以前自己做题还是有所提升的,做题思路,做题方法都有了规范


http://www.ppmy.cn/news/19647.html

相关文章

pytorch深度学习基础(十一)——常用结构化CNN模型构建

结构化CNN模型构建与测试前言GoogLeNet结构Inception块模型构建resNet18模型结构残差块模型构建denseNet模型结构DenseBlocktransition_block模型构建结尾前言 在本专栏的上一篇博客中我们介绍了常用的线性模型,在本文中我们将介绍GoogleNet、resNet、denseNet这类…

【MySQL进阶】MySQL视图详解

序号系列文章6【MySQL基础】MySQL单表操作详解7【MySQL基础】运算符及相关函数详解8【MySQL基础】MySQL多表操作详解9【MySQL进阶】MySQL事务详解文章目录前言1,视图1.1,视图概述1.2,视图使用环境1.3,视图创建格式1.4,…

常见DEM数据汇总

常见DEM数据汇总ALOS-2 PALSAR DEM数据 [12.5m]Shuttle Radar Topography Mission (SRTM) [30m, 90m]Advanced Spaceborne Thermal Emission and Reflection Radiometer (ASTER) [30m]USGS 30 ARC-second Global Elevation Data, GTOPO30 [1km]火星轨道器激光高度计&#xff08…

恶意代码分析实战 16 Shellcode分析

16.1 Lab19-01 将程序载入IDA。 一堆ecx自增的操作。到200是正常的代码段。 shellcode的解码器也是从这里开始的,一开始的xor用于清空ecx,之后将18dh赋给cx,jmp来到loc_21f,而在下图可以看到loc_21调用sub_208,在call指令执行后&#xff0…

【数据结构】7.2 线性表的查找

文章目录7.2.1 顺序查找(线性查找)顺序查找算法设置监视哨的顺序查找顺序查找算法分析7.2.2 折半查找(二分或对分查找)折半查找算法折半查找性能分析 - 判定树7.2.3 分块查找分快查找算法分块查找算法分析及比较查找方法比较7.2.1…

【进击的算法】基础算法——怎么优雅地控制边界范围

学习范围 : ✔️数组 ✔️边界控制本文作者 : 蓝色学者i 边界控制的艺术前言一、为什么需要控制边界?二、怎么优雅地控制边界?三、令人抓狂的二分查找3.1 题目概述3.2解题思路3.3 解决方案方案一:边界都有效方案二&…

Docker 基础 - 3

Web 服务器与应用 Nginx 我的Nginx Docker镜像 ## 设置继承自己创建的 sshd 镜像 FROM caseycui/ubuntu-sshd## 维护者 LABEL maintainer"CaseyCui cuikaidongfoxmail.com"## 安装 nginx RUN apt-get update \&& DEBIAN_FRONTENDnoninteractive apt-get ins…

[Python]调用pytdx的代码示例

安装pytdxpip install pytdx简单示范from pytdx.hq import TdxHq_API api TdxHq_API() # 数据获取接口一般返回list结构, with api.connect(119.147.212.81, 7709): # 返回普通listdata api.get_security_bars(9, 0, 000001, 0, 10) print(data)输出结果[Ordered…