当前位置: 首页 > news >正文

反转链表.

方法一:双指针法

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode*temp;ListNode*cur=head;ListNode*pre=NULL;while(cur){temp=cur->next;cur->next=pre;pre=cur;cur=temp;}return pre;}
};

创立一个指针temp用来存储链表。创立一个指针cur指向头节点head。创立一个指针pre指向指针为空NULL。当cur不为空时进入循环,创建一个ListNode类型的指针tmp,用于暂存cur结点的下一个节点。将cur指向下一个节点的指针指向pre(链表指针反转),将pre向后移,即pre=cur,将cur向后移,即cur=temp;跳出循环,返回pre(用为此时pre位于最后一个节点) 

方法二:递归法

1.从前往后递归。

reverse是反转函数

class Solution {
public:ListNode* reverseList(ListNode* head) {return reverse(NULL, head);}ListNode* reverse(ListNode* pre, ListNode* cur) {if (cur == NULL)return pre;    ListNode* temp = cur->next;cur->next = pre;return reverse(cur, temp);}  
};

 定义一个主函数,调用子函数。定义一个子函数,如果cur节点为空,则返回pre。创立一个指针temp用来储存链表。将cur指向下一个节点的指针指向pre(链表指针反转),返回reverse函数。

2.从后往前递归

class Solution {
public:ListNode* reverseList(ListNode* head) {if(head==NULL) return NULL;if(head->next==NULL)return head;ListNode*last=reverseList(head->next);head->next->next=head;head->next=NULL;return last;}
};

先判断边缘条件,如果头指针head为空null则返回空链表,如果头指针head指向的下一个节点head->next为空null,则返回头指针head。用reverseList翻转第二个节点开始的指针,last指向翻转后的链表节点。头结点指向的下一个节点的指针head->next->next指向头节点head。头节点指向的下一个节点的指针head->next指向空节点null。最后返回last。

 方法三:使用虚拟头节点反转链表

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* dummyhead=new ListNode(0);dummyhead->next=NULL;ListNode*cur=head;while(cur!=NULL){ListNode* tmp=cur->next;cur->next=dummyhead->next;dummyhead->next=cur;cur=tmp;}       head=dummyhead->next;return head;}
};

创建一个ListNode类型的虚拟头节点dummyhead,值为0。dummyhead指针的指向为空NULL。创建一个ListNode类型的指针cur,并将其初始化传入head。如果指针cur的指向不为空NULL,则进入循环,创建一个ListNode类型的指针tmp,用于暂存cur结点的下一个节点。将当前节点cur指针指向的下一个结点指向dummyhead指针指向的象一个节点。将dummyhead指向下一个节点的指针指向cur。将cur后移,即cur=tmp。跳出循环。用头插法将遍历后的链表插入到虚拟头节点指向的下一个节点。返回反转后的链表头指针。

相关文章:

  • G1垃圾回收器中YoungGC和MixedGC的区别
  • 【ESP32-IDF笔记】20-配置以太网网络(W5500)
  • linux离线部署open-metadata
  • kotlin与MVVM结合使用总结(三)
  • 13.ArkUI Navigation的介绍和使用
  • SIEMENS PLC程序解读 -Serialize(序列化)SCATTER_BLK(数据分散)
  • 关于位运算的一些小记
  • 速成GO访问sql,个人笔记
  • AI之FastAPI+ollama调用嵌入模型OllamaBgeEmbeddings
  • 用 ESP32 模拟 Wiegand 刷卡器:开发门禁系统必备的小工具
  • C++入门小馆: 深入了解STLlist
  • 【金仓数据库征文】-不懂数据库也能看懂!一文解析金仓技术介绍以典型应用
  • 电子病历高质量语料库构建方法与架构项目(数据遗忘篇)
  • Redis 集群切片全解析:四种常见技术的原理、优劣与应用
  • 【MQ篇】RabbitMQ的消费者确认机制实战!
  • HTML word属性
  • 文档驱动:“提纲挈领”视角下的项目管理中枢构建
  • SpringBoot 学习
  • 2025 Java 开发避坑指南:如何避免踩依赖管理的坑?
  • 【Linux网络编程】应用层协议HTTP(实现一个简单的http服务)
  • 航天科技集团质量技术部部长严泽想升任集团副总经理
  • 迎接神十九乘组回家,东风着陆场各项工作已准备就绪
  • 30天内三访中国,宝马董事长:没有一家公司可以在全球价值链外独立运行
  • 专访|白俄罗斯共产党中央第一书记瑟兰科夫:只有大家联合起来,才能有效应对当前危机所带来的冲击
  • 潘功胜:央行将实施好适度宽松的货币政策,推动中国经济高质量发展
  • 全国党委和政府秘书长会议在京召开,蔡奇出席并讲话