当前位置:网站首页>反转链表的多种写法(武器库了属于是)
反转链表的多种写法(武器库了属于是)
2022-08-09 15:45:00 【老乐大魔王】
指针结构体:
struct ListNode{
int val;
int ListNode *next;
ListNode():val(0),next(nullptr){
}
ListNode(int val):val(val){
}
ListNode(int val,ListNode* next):val(x),next(next){
}
};
迭代法:分三种,分别为头插法,新建链表法,直接反转法
ListNode* reverseList(ListNode* head) {
if(!head)return nullptr;
ListNode* dummy=new ListNode(-1);
dummy->next=head;
ListNode* prev=head;
ListNode* pcur=nullptr;
while(prev->next){
pcur=prev->next;
prev->next=pcur->next;
pcur->next=dummy->next;
dummy->next=pcur;
}
return dummy->next;
}
ListNode* reverseList(ListNode* head{
if(!head)return nullptr;
ListNode* dummy=new ListNode(-1);
ListNode* pcur=head;
ListNode* pnext=nullptr;
while(pcur){
pnext=pcur->next;
pcur->next=dummy->next;
dummy->next=pcur;
pcur=pnext;
}
return dummy->next;
}
ListNode* reverseList(ListNode* head){
ListNode* pcur=head;
ListNode* prev=nullptr;
while(pcur){
ListNode* next=pcur->next;
pcur->next=prev;
prev=pcur;
pcur=next;
}
return prev;
}
递归法
ListNode* reverseList(ListNode* head){
if(!head||!head->next)return head;//递归出口
ListNode* new_head=reverseList(head->next);
head->next->next=head;//关键代码,这里得值得好好想想,此时的head->next之后的节点都是经过反转了的
head->next=nullptr;
return new_head;
}
关于 head->next->next=head代码解释:
head之后的节点都是经过反转了的,这句话理解好就行了
1 -> 2 -> 3 -> 4 -> … -> k -> k+1 <- k+2 <- … <- n
当我们要处理第k个节点时,k是指向k+1的,k+1是指向nullptr的,但是我们想k+1指向k,即k+1->next=k即可,此时k+1=k->next,将k+1代换过后的式子为k->next->next=k
经过处理后:
1 -> 2 -> 3 -> 4 -> … -> k <- k+1 <- k+2 <- … <- n
不要忘记将k的指向置空哦k->next=nullptr
边栏推荐
猜你喜欢

领先实践|全球最大红酒App如何用设计冲刺创新vivino模式

网络——局域网和广域网

How bad can a programmer be?

B45 - 基于STM32单片机的家庭防火防盗系统的设计

HR获取入职日期 RP_GET_HIRE_DATE

A50 - 基于51单片机的太阳能充电路灯设计

<IDEA using tricks & & combined operation of common keys>

uniapp project construction

Sigrity PowerSI Characteristic Impedance and Coupling Simulation

网络——TCP拥塞控制
随机推荐
初识C语言(1)
利用C#传输Json数据
AVL树的插入操作
B024 – STM32温湿度控制体温检测烟雾报警系统
1.1、VIFB: A Visible and Infrared Image Fusion Benchmark(一个可见光与红外图像融合Benchmark)文章阅读
七.getchar 和 scanf
2022年8月9日:用C#生成.NET应用程序--使用 Visual Studio Code 调试器,以交互方式调试 .NET 应用(不会,失败)
二.sizeof和strlen的区别
Redis Cache Expiration and Retirement Policy
开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!
网络——IPv6 vs IPv4
SQL trill interview: send you a universal template, to?(key, each user to log on to the maximum number of consecutive monthly)
C语言小游戏——三子棋
Nacos Jaspyt配置加密设置
2019强网杯高明的黑客
网络——虚拟专用网和地址转换NAT
总结了 110+ 公开专业数据集
PADS生成位号图
Print the star chart "Recommended Collection"
Apple Developer Account Apply for D-U-N-S Number