当前位置:网站首页>反转链表的多种写法(武器库了属于是)
反转链表的多种写法(武器库了属于是)
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
边栏推荐
猜你喜欢
随机推荐
WeChat developer tools error, prompt did not find the entrance to the app. The json file
Codeforces Round # 806 (Div. 4) | | precipitation) bloodbath wudaokou
网络——路由器
B024 – STM32温湿度控制体温检测烟雾报警系统
2019强网杯高明的黑客
无需支付688苹果开发者账号,xcode13打包导出ipa,提供他人进行内测
2022年8月9日:用C#生成.NET应用程序--使用 Visual Studio Code 调试器,以交互方式调试 .NET 应用(不会,失败)
dichotomy
巧用Prometheus来扩展kubernetes调度器
七.getchar 和 scanf
良匠-手把手教你写NFT抢购软(二)
二分法
计组——大端方式和小端方式相关题目
转行做程序员,从月薪5k到30k,45岁测试员道出了一路的心酸
现在,怎么挑选舞台租赁LED显示屏?
B45 - 基于STM32单片机的家庭防火防盗系统的设计
网络——数字数据编码
Leetcode——3.无重复字符的最长字串
MySQL 5.5 series installation steps tutorial (graphical version)
HR获取入职日期 RP_GET_HIRE_DATE