首页 > 其他分享 >24.两两交换链表中的节点

24.两两交换链表中的节点

时间:2024-01-18 17:12:31浏览次数:31  
标签:24 head ListNode temp nullptr next 链表 节点

1.题目介绍

2.题解

2.1 递归

思路

抓住两个关键点:1.何时终止递归:为空或者是只有一个节点时均无法进行交换(至少两个节点) 2. 如何交换:设置一个newhead,其next指向head;而head的next指向原来newhead的next,但注意这里newhead的next的两个节点也进行了交换,所以使用递归的方式指向交换过的节点

代码

/**
 * 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;
      ListNode* newhead = head -> next;
      head -> next = swapPairs(newhead->next);
      newhead->next = head;
      return newhead;
    }
};

2.2 迭代

思路

总体思路是使用一个临时节点指针temp指向要交换两个节点的前一个节点(对于首节点和第二节点创建一个哑结点,三个节点方便链表交换!!!)
然后temp不断向后遍历,直到后面没有节点或者只有一个节点无法交换.

代码

/**
 * 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, head);
        ListNode* temp = dummyHead;
        while (temp->next != nullptr && temp->next->next != nullptr) {
            ListNode* node1 = temp->next;
            ListNode* node2 = temp->next->next;
            temp->next = node2;
            node1->next = node2->next;
            node2->next = node1;
            temp = temp->next->next;
        }
        ListNode* ans = dummyHead->next;
        delete dummyHead;
        return ans;
    }
};

标签:24,head,ListNode,temp,nullptr,next,链表,节点
From: https://www.cnblogs.com/trmbh12/p/17972931

相关文章

  • 2024.1.18-每日进度笔记
    今天,我主要尝试了通过摄像头拍照并保存在本地指定文件。 参考:百度文心一言的回复。 <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>获取摄像头画面并拍照</title......
  • 【2024-01-17】连岳摘抄
    23:59我们无法将习惯抛出窗外,但我们可以让习惯一阶阶地下楼。                                                 ——马克·吐温自私的根源在于吝啬。孔子说过,就是像......
  • ABC245G
    似乎是经典套路?先不考虑颜色限制,那么就直接把\(l\)个关键点当作起点跑多源最短路就行了。现在考虑颜色限制,有一种暴力的想法是枚举所有颜色,只把这种颜色的点当作起点,然后跑dijkstra,然后更新颜色不为这个的终点。发现这样终点就被更新了很多次,考虑优化。考虑枚举颜色的每个二......
  • AGC240G
    ABC240GTeleportingTakahashi组合意义天地灭,代数推导保平安。根据对称性,从\((0,0,0)\)走到\((x,y,z)\)的方案数等于走到\((|x|,|y|,|z|)\)的方案数,下文假设\(x,y,z>0\)。最小步数显然是\(x+y+z\),每一步都是将某一维加1,如果我们在某一维添上一个减1的操作,为了让这......
  • 恒驰喜讯荣获华为云优秀服务伙伴奖!华为云生态大会2024开启联合解决方案新篇章
    1月15日-16日,以“领航新开局,共赢新生态”为主题的华为云生态大会2024在华为云贵安数据中心·云上屯隆重启幕。华为云和全国生态伙伴、开发者,在新年伊始,共同见证华为云生态战略的新进展、伙伴政策的新升级,分享源自优秀生态伙伴的标杆案例和心得,探讨如何继续发挥生态力量,打造数智时代......
  • 2024-01-17
    所谓滑动窗口就是不断移动子序列的起始位置和终止位置,从而得到我们想要的结果。Integer.MAX_VALUE表示int数据类型的最大取值数:2147483647Integer.MIN_VALUE表示int数据类型的最小取值数:-2147483648力扣-滑动窗口-904:找出至多包含两种元素的最长子串,返回其长度classSolutio......
  • 2024年1月中国数据库排行榜: OPOT 组合续写贺新年,达梦、腾讯发力迎升势
    2024年开局,墨天轮中国数据库流行度排行火热出炉,292个国产数据库齐聚榜单。整体来看,榜单前十整体变化不大,“O-P-O”格局稳固,前五位名次未发生变动。但新年伊始,各家数据库热度上升迅猛,分数差距也逐渐缩小,这微妙的波动折射出激烈的竞争态势,行业内涌动充分活力。本月排行榜解读文章......
  • (Python)每日代码||2024.1.18
    m=10a=10print(id(m))print(id(a))'''输出140713874176728140713874176728'''print()a=1b=2c=3d=a+bprint('a(1)\t'+str(id(a)))print('b(2)\t'+str(id(b)))print('c(3)\t'+str(id......
  • AWR1243案例——软件篇
    一、软件安装列表MMWAVE-STUDIO:mmwave_studio_02_01_01_00_win32.exeMCR_R2015aSP1_win32_installer.exeftd2xx.dll二、安装详情1.MMWAVE-STUDIOMMWAVE-STUDIO可从TI官网进行下载:https://www.ti.com.cn/tool/cn/MMWAVE-STUDIO#downloads选择AWR1243对应的软件版本,如图......
  • 11.Node节点维护
    题目:Node节点维护配置环境kubectlconfiguse-contextek8s将名为ek8s-node-0的node节点设置为不可用,并重新调度该node上所有运行的pods。官方参考地址:KubectlReferenceDocs帮助命令:kubectldrain--help解答:1.切换答题环境kubectlconfiguse-contextek8s2.设置......