【Leetcode60天带刷】day04链表——24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交

news/2025/2/23 1:57:35/


 题目:24. 两两交换链表中的节点

Leetcode原题链接:24. 两两交换链表中的节点


 思考历程与知识点: 

因为头结点没有前一个节点,所以为了让所有节点都能采用同一种调换方式,选择用虚拟头结点的写法。虚拟头结点可以理解为头结点的一个替身。原来是头结点为老大,后面一群小弟,前面没东西。现在新立一个替身,让替身指向头结点后,头结点再指向后面的小弟们。这样,现在的老大就是那个替身,而真正的头结点和其他小弟一样,都跟在后面,这样就可以用同一种方法进行调换了。


 题解:

/*** Definition for singly-linked list.* 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* swapPairs(ListNode* head) {ListNode* dummyhead = new ListNode(0);dummyhead -> next = head;ListNode* cur = dummyhead;while(cur -> next != nullptr && cur -> next -> next != nullptr) {ListNode* tmp = cur -> next;ListNode* tmp2 = cur -> next -> next -> next ;cur -> next = cur ->next ->next;cur -> next ->next  = tmp;cur -> next ->next ->next = tmp2;cur = cur ->next ->next;} return dummyhead -> next;}
};

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

Leetcode原题链接:19. 删除链表的倒数第 N 个结点


 思考历程与知识点: 

删除倒数第n个节点。因为链表像一串小火车,你只知道火车头的位置。要想知道全长,你只能从火车头一节一节车厢往后找。当你到达需要删除的车厢时,你并不知道你已经到了,因为只有知道全长才能知道倒数第n个是哪一个,找完全部后才知道一共有多少个车厢。所以要想删掉倒数第n个,并且只需要遍历一次的情况下,需要想办法知道什么时候已经到达需要删除的车厢了。

双指针:设置两个指针,中间隔着n个距离,当第二个指针到达最后一个节点时,第一个指针就是倒数第n个的距离,很简单的。


 题解:

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* slow = dummyHead;ListNode* fast = dummyHead;while(n-- && fast != NULL) {fast = fast->next;}fast = fast->next; // fast再提前走一步,因为需要让slow指向删除节点的上一个节点while (fast != NULL) {fast = fast->next;slow = slow->next;}slow->next = slow->next->next; // ListNode *tmp = slow->next;  C++释放内存的逻辑// slow->next = tmp->next;// delete nth;return dummyHead->next;}
};


题目: 面试题 02.07. 链表相交

Leetcode原题链接:面试题 02.07. 链表相交


思考历程与知识点: 

如果一个节点一个节点找,那就是上面的线路挨个节点选一遍,假设它是交点,然后每个都要在下面从头到尾找一圈,那复杂度就是O(N*N),实在是太大了。

所以换个思路,既然最后会汇合成一条线路,那就说明,两个链表最后几个肯定一样呀。所以只要从后往前找,一直到两边不同的时候,就是分叉点了。


 题解:

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* curA = headA;ListNode* curB = headB;int lenA = 0, lenB = 0;while (curA != NULL) { // 求链表A的长度lenA++;curA = curA->next;}while (curB != NULL) { // 求链表B的长度lenB++;curB = curB->next;}curA = headA;curB = headB;// 让curA为最长链表的头,lenA为其长度if (lenB > lenA) {swap (lenA, lenB);swap (curA, curB);}// 求长度差int gap = lenA - lenB;// 让curA和curB在同一起点上(末尾位置对齐)while (gap--) {curA = curA->next;}// 遍历curA 和 curB,遇到相同则直接返回while (curA != NULL) {if (curA == curB) {return curA;}curA = curA->next;curB = curB->next;}return NULL;}
};

欢迎点赞,收藏,评论,你的鼓励就是我创作的最大动力!(๑╹◡╹)ノ"""

版权声明:本文为CSDN博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:渡梦酒的博客_CSDN博客-csdn领域博主


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

相关文章

英语学习:f开头

face 脸,面向 facial 面部用的 fact 事实,现实 factory 工厂 fade 褪色 fail 失败,不及格 failure 失败 fair 公平的 fairly 公正地 fairness 公平 faith 信仰 fall 秋季 familiar 熟悉的 family 家族 famous 著名的 fan 迷&a…

PrivateGPT(如何部署及使用感受)

前言 最近在GitHub上出现了一个名为PrivateGPT的开源项目。该项目旨在为面临敏感数据、涉密信息或个人隐私问题的用户提供一种新的聊天工具。PrivateGPT具备完整的数据控制能力,使用户能够在本地环境中与强大的语言模型进行交互,无需上传数据到互联网或…

go 的编译执行流程,build,run

build命令简述 在Golang中,build过程主要由go build执行。它完成了源码的编译与可执行文件的生成。 go build接收参数为.go文件或目录,默认情况下编译当前目录下所有.go文件。在main包下执行会生成相应的可执行文件,在非main包下&#xff0…

python中结果返回<built-in method reverse of list object at 0x000002032889FD48>

L2 [1,2,3] print(L2.reverse) 输出结果为 <built-in method reverse of list object at 0x000002032889FD48> 想要的结果为 [3, 2, 1] 错误原因&#xff1a;reverse不可以直接print 正确代码为 L2 [1,2,3] L2.reverse() print(L2)

单片机操作寄存器应用,8、16、32数按位翻转

概述 在单片机实际应用中&#xff0c;操作各种芯片&#xff0c;都是在操作寄存器。有些芯片比较特殊&#xff0c;如&#xff1a;低位在前高位在后&#xff0c;有时通过逻辑分析仪抓到波形又是反向。在编写程序时&#xff0c;每次需要都要换算&#xff0c;觉得非常麻烦&#xff…

c54x汇编语言程序设计,第4章_C54x的汇编语言程序设计.ppt

第4章TMS320C54x汇编语言程序设计,4.1概述4.1.1汇编语言源程序格式汇编语言程序以.asm为扩展名&#xff0c;可以用任意的编辑器编写源文件。一条语句占源程序的一行&#xff0c;长度可以是源文件编辑器格式允许的长度&#xff0c;但汇编器每行最多读200个字符。因此&#xff0c…

微机----------------存储器

目录 位扩展定义 字扩展定义1、线选法定义优点缺点 2、部分译码法定义 3、全译码法定义优点缺点 ⭐⭐⭐字位扩展定义问题 位扩展 定义 当存储芯片的存储字的数量 满足需要&#xff0c;而存储字长&#xff08;存储单元的位数&#xff09;不满足需要时&#xff0c;就需要增加存…

Windows保护模式(四)中断门陷阱门

中断门 Windows 系统没有使用调用门&#xff0c;但使用了中断门。 中断描述符表&#xff08;IDT&#xff09; 描述 IDT即中断描述符表&#xff0c;同GDT一样&#xff0c;IDT也是由一系列描述符组成的&#xff0c;每个描述符占8个字节 但要注意的是&#xff0c;IDT表中的第一…