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

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

时间:2024-11-19 19:44:15浏览次数:3  
标签:24 head ListNode next 链表 curr1 curr2 prev 节点

https://leetcode.cn/problems/swap-nodes-in-pairs/?envType=study-plan-v2&envId=top-100-liked
对于我们正常交换单向链表的两个节点我们需要知道三个节点的信息,
1.对于a->b->c,我们要交换a、b就要知道a、b、c三个节点,因为我们需要将a的next指向c,将b的next指向a,由于b->c这条路断了而c的next指向d,所以我们还需要保存c才能继续往下走,我们将b看作curr它每次前进两步,a看作prev,c看作next,每次使curr.next = prev, prev.next = next,然后令prev = next, curr = next.next,next = curr.next当prev或curr有一个为空就退出.
2.若对于a->b->c->d,我们要交换c、d我们就需要知道四个节点信息,b,c,d,e=d.next,d.next = c, c.next = e, b.next = d, 我们将b视作prev,c视作curr1,d视作curr2,e视作next.
所以我们需要考虑两种情况,当交换的节点包括头节点就用方法一其余用方法二

public class Solution {
    public class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode prev = null, curr1 = head, curr2 = head.next, next = curr2.next;
        //交换头节点
        curr2.next = curr1;
        curr1.next = next;
        head = curr2;
        //交换后续节点
        if(next == null || next.next == null) return head;
        prev = curr1;
        curr1 = next;
        curr2 = curr1.next;
        next = curr2.next;
        while (curr1 != null && curr2 != null) {
            curr2.next = curr1;
            curr1.next = next;
            prev.next = curr2;
            if(next == null || next.next == null) return head;
            prev = curr1;
            curr1 = next;
            curr2 = curr1.next;
            next = curr2.next;
        }
        return head;
    }
}

标签:24,head,ListNode,next,链表,curr1,curr2,prev,节点
From: https://blog.csdn.net/release_lonely/article/details/143894014

相关文章

  • 2024年11月一区SCI-逃离优化算法Escape Algorithm-附Matlab免费代码
    引言本期介绍了一种受人群疏散行为的启发的元启发式优化算法,称为逃离优化算法EscapeAlgorithm,ESC。该算法于2024年11月最新发表在JCR1区,中科院2区TopSCI期刊 ArtificialIntelligenceReview。ESC的灵感来自于人们在紧急疏散期间的行为。本节解释人群疏散系统的背景,以及......
  • SS241119C. 甜果(sugar)
    SS241119C.甜果(sugar)题意有\(n\)个人,每个人初始有\(a_i\)颗糖果,有\(n\)个事件,事件\(i\)是如果\(a_i>a_{b_i}\),那么\(a_i':=a_i+w_i\)。问所有事件以随机的排列的顺序依次发生后,每个人的期望糖果数量。思路即求每个事发生的概率\(p_i\),那么\(ans_i=a_i......
  • [考试记录] 2024.11.19 noip模拟赛17
    T1选取字符串warning❗:本题解前缀含量过高。挺典的kmp。考虑到题目中的串都是一个串的前缀,那么所选出来的串,他们的前缀一定是最短的那个串。不妨直接枚举每一个前缀,也就是枚举每一个串,看他们是否可以作为前缀出现,hash即可,复杂度\(\mathcal{O}(N^2)\)。换个思路,考虑有多......
  • 多校A层冲刺NOIP2024模拟赛24
    多校A层冲刺NOIP2024模拟赛24\(T1\)A.选取字符串\(100pts\)考虑建出失配树,然后等价于询问\(\sum\limits_{S\sube\{0,1,2,\dots,n\},|S|=k}dep_{\operatorname{LCA}\{S\}}^{2}\)。不妨从\(\operatorname{LCA}\)的角度考虑,统计\(x\)能作为多少个\(|S|\)......
  • 2024/11/19
    队列应用(蓝桥杯)分数10作者liudan单位石家庄铁道大学CLZ银行只有两个接待窗口,VIP窗口和普通窗口,VIP用户进入VIP窗口排队,剩下的进入普通窗口排队。现有M次操作,操作有四种类型,如下:INnameV:表示一名叫name的用户到VIP窗口排队OUTV:表示VIP窗口队头的用户离开......
  • 2024年全国职业院校技能大赛中职组《大数据应用与服务赛项》赛项赛题解析第三模块
      职业院校技能大赛大数据应用与服务交流群:q743959419目录模块三:数据分析与可视化任务一:数据分析与可视化子任务一:柱状图数据分析与可视化子任务二:折线图数据分析与可视化子任务三:饼图数据分析与可视化子任务四:雷达图数据分析与可视化任务二:数据分析子任务一:Excel......
  • 常见链表类型
    单向链表双向链表循环链表双向循环链表1.单向链表单向链表的每个节点只包含数据和指向下一个节点的指针。它只能从头到尾单向遍历。[数据|下一节点指针]->[数据|下一节点指针]->NULL 示例#include<stdio.h>#include<stdlib.h>structNode{intdata;st......
  • 【SolidWorks 2024下载与安装教程】
    ‌SolidWorks2024是一款由达索系统(DassaultSystemes)开发的三维CAD软件,广泛应用于机械设计、产品开发、工程设计、制造等领域。‌ 该软件以其强大的功能和易学易用的特点,深受工程师和设计师的喜爱。SolidWorks2024在2024版本中引入了一系列新功能和改进,旨在提高设计效率、增......
  • [71] (多校联训) A层冲刺NOIP2024模拟赛24
    bydT3放道这种题有什么深意吗flowchartTB A(选取字符串) styleAcolor:#ffffff,fill:#00c0c0,stroke:#ffffff确实是签,但是一直在想组合意义,最后因为没提前处理逆元遗憾离场了,赛后看题解发现的确是往树上转化更简单点赛时的组合意义代码没过#include<bits/stdc++.h>us......
  • 20222315 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1、实验内容1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工具进行搜集......