首页 > 编程语言 >算法

算法

时间:2022-10-04 08:55:52浏览次数:57  
标签:dummy ListNode cur val fast next 算法


24. 两两交换链表中的节点

![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b52140970264dc68234ba92976a3954~tplv-k3u1fbpfcp-watermark.image?)
```/**
* 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* dummy = new ListNode(0);
dummy->next = head;
ListNode* cur = dummy;
while(cur->next != NULL && cur->next->next != NULL){ //先后顺序不能乱,否则会报空指针异常。
ListNode* tmp = cur->next;
ListNode* tmp1 = cur->next->next->next; //加入交换节点1和2,节点1和3会容易丢失,先保存。
cur->next = cur->next->next;
cur->next->next = tmp;
tmp->next = tmp1;
cur = cur->next->next; //cur要向后移动两位,继续对后面的节点进行操作
}
return dummy->next;
}
};
```

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

![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd849022172a406cbc997a8f87827af9~tplv-k3u1fbpfcp-watermark.image?)

```/**
* 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* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* slow = dummy;
ListNode* fast = dummy;
while(n-- && fast != NULL){
fast = fast->next;
}
fast = fast->next; //快指针必须再先走一步,要让慢指针指向删除的那个节点的上一个
while(fast != NULL){
fast = fast->next;
slow = slow->next;
}
ListNode* tmp =slow->next;
slow->next = slow->next->next;
delete tmp; //还要把这个节点从内存中删掉
return dummy->next;

}
};
```

                   

标签:dummy,ListNode,cur,val,fast,next,算法
From: https://www.cnblogs.com/hu-a-li/p/16753158.html

相关文章

  • 字符串匹配之Sunday算法
    简介Sunday算法是一种字符串匹配算法,相比于KMP算法,它比较简单易学。在有些时候,比如字符串很长的时候,它是比KMP要高效的。核心思想从前往后匹配,匹配失败时关注主串中......
  • Java手写实现链表队列和数组队列【数据结构与算法】
    packagealgorithm;/**@authorAdministrator@date2022-09-1317:50*/publicclassQueueLinked{privatestaticclassNode{Eitem;Nodenext;publicNode(Eitem,N......
  • Java手写实现栈【数据结构与算法】
    packagealgorithm;importjava.util.Arrays;importjava.util.Iterator;/**@authorAdministrator@date2022-09-1216:38数组栈*/publicclassMyArrayStack{//定义......
  • 常见距离算法
    机器学习中有很多的距离计算公式,用于计算数据和数据之间的距离,进而计算相似度或者其他。1.欧式距离(EuclideanDistance)​ 欧式距离是最常见的距离度量方法。小学、初中、......
  • Latex 如何写算法?推荐模板
    之前我已经在​​这篇文章​​总结了现有的算法包的区别。如果有选择苦难症的朋友可以考虑无脑使用以下模板来写算法。\usepackage[noend]{algpseudocode}#noend表示算法......
  • 计算空间物体包围球的两种算法实现
    详细介绍了计算空间包围球的两种算法。1.概述在进行二维空间几何运算的之前,往往会用包围盒进行快速碰撞检测,从而筛掉一些无法碰撞到的可能。而在三......
  • 浙江大学陈越老师《数据结构与算法》课程笔记
    目录1.1什么是数据结构1.1解决问题方法的效率1.2数据结构的定义1.3抽象数据类型1.2什么是算法1.2.1算法指标1.2.2复杂度的渐进表示法1.2.3例子—求最大连续子列和2......
  • AcWing算法提高课 龟速乘(防止由于MOD过大使乘法爆long long)
    在求a*b%MOD的时候,如果MOD>1e10,则即便使用a%MOD*b%MOD,依旧有可能会爆longlong故可以利用和快速幂相似的思想,将乘法按位转化为加法,避免报longlong龟速乘模板:LLSlowM......
  • 数据结构与算法分析——C语言描述(第9章 图论算法)*
    目录9.1若干定义图的表示9.1若干定义一个图(graph)\(G=(V,E)\)由顶点(vertex)的集\(V\)和边(edge)/弧(arc)的集\(E\)组成。每一条边就是一幅点对\((v,w)\),其中\(v,......
  • AcWing 算法提高课 拓展欧几里得算法 同余
    拓展欧几里得算法:1、模板:https://www.cnblogs.com/ydUESTC/p/16676229.html2、原理: 3、应用:拓展欧几里得算法解线性同余方程:  4、例题:(1)线性同余方程:https://w......