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

力扣24:两两交换链表中的节点

力扣24:两两交换链表中的节点

  • 题目
  • 思路
    • 思路1:递归
    • 思路2:迭代
  • 代码
    • 递归
    • 迭代

题目

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思路

思路1:递归

想要完成交换我们先考虑一下什么情况下不再需要交换了,很明显就是没有节点了或者只剩下一个节点也就是节点数量分别为偶数和奇数的情况。那么我们再来想一下两个节点p->q完成交换后的next分别都是什么内容,p的next是后续完成交换的节点所以我们可以使用递归来一层一层的设置p的next,而q的next就很简单就是p。

思路2:迭代

想要正常交换两个节点我们必须知道前置节点,所以显而易见我们可以设置一个哨兵节点来当作前置节点之后就慢慢的进行一次一次的交换直到最后没有节点或者只有一个节点

代码

递归

/*** 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) {//没有节点或者只有一个节点//递归结束条件if(head == nullptr || head->next == nullptr){return head;}//p->qListNode* newhead = head->next;//qhead->next = swapPairs(newhead->next);//p->nextnewhead->next = head;//q->nextreturn newhead;}
};

迭代

/*** 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* dummyhead = new ListNode(0);dummyhead->next = head;ListNode* tmp = dummyhead;//没有节点或者只有一个节点while(tmp ->next != nullptr && tmp->next->next != nullptr){ListNode* node1 = tmp->next;ListNode* node2 = tmp->next->next;tmp->next = node2;node1->next = node2->next;node2->next = node1;tmp = node1;}return dummyhead->next;}
};
http://www.lryc.cn/news/593740.html

相关文章:

  • [FFmpeg] 输入输出访问 | 管道系统 | AVIOContext 与 URLProtocol | 门面模式
  • 外观设计模式
  • 零基础学习性能测试第二章-linux服务器监控:CPU监控
  • Redis字符串操作指南:从入门到实战应用
  • SQLShift:一款异构数据库存储过程迁移工具
  • c++ 基本语法易错与技巧总结
  • 模型的评估与选择
  • 【52】MFC入门到精通——(CComboBox)下拉框选项顺序与初始化不一致,默认显示项也不一致
  • yolov8-pos/yolov11-pos openvino C++部署
  • bash方式启动模型训练
  • OpenCV特征点提取算法orb、surf、sift对比
  • 相机参数的格式与作用
  • 算法基础知识总结
  • MYSQL 第一次作业
  • 量子计算与AI融合的技术突破与实践路径
  • scalelsd 笔记 线段识别 本地部署 模型架构
  • 【面试题】大厂高压面经实录丨第三期
  • SpringBoot服装推荐系统实战
  • 石子问题(区间dp)
  • 泛型机制详解
  • Java中缓存的使用浅讲
  • 从代码学习深度强化学习 - SAC PyTorch版
  • openmv小车追小球
  • PCA主成分分析
  • xss-labs1-8题
  • lvs笔记
  • JAVA高级第六章 输入和输出处理(一)
  • python类Keys
  • OpenCV 官翻 2 - 图像处理
  • CAN通信驱动开发注意事项