当前位置:网站首页>反转链表的多种写法(武器库了属于是)
反转链表的多种写法(武器库了属于是)
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
边栏推荐
猜你喜欢
随机推荐
A42 - 基于51单片机的洗衣机设计
网络——路由器
Video chat source code - how to improve the quality of one-to-one live broadcast?
【服务器数据恢复】SAN LUN映射出错导致文件系统数据丢失的数据恢复案例
微信开发者工具程序开发好后,不报错,但是黑屏「建议收藏」
std::uniform_real_distribution的一个bug引发的服务器崩溃
B43 - 基于STM32单片机的自动视力检测仪
网络——虚拟专用网和地址转换NAT
2022国赛Ezpop
ESP8266-Arduino编程实例-MQ-5液化天然气传感器驱动
开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!
我的第一篇博客
良匠-手把手教你写NFT抢购软(一)
Leetcode 算法面试冲刺 热题 HOT 100 刷题(406 416 437 438 448)(六十九)
AVL树的插入操作
uniapp project construction
[1413. Stepwise summation to get the minimum value of positive numbers]
智慧灯杆网关智慧交通应用
分布式恢复【进阶篇】
C语言小游戏—扫雷









