Swap Nodes in Pairs 链表两两交换节点@LeetCode

LeetCode算法题:两两交换链表中的节点swapPairs 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs 著作权归... 阅读详情

题目:

链表两两交换节点

思路:

判断比较花时间,需要分奇数个节点和偶数个节点的情况,待改进。


package Level2;

import Utility.ListNode;

/**
 * Swap Nodes in Pairs 
 * 
 * 	Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
 *
 */
public class S24 {

	public static void main(String[] args) {
		ListNode n1 = new ListNode(1);
		ListNode n2 = new ListNode(2);
		n1.next = n2;
		ListNode n3 = new ListNode(3);
		n2.next = n3;
		n1.print();
		ListNode head = swapPairs(n1);
		head.print();
	}
	
	public static ListNode swapPairs(ListNode head) {
        if(head == null){
        	return null;
        }
        // 当只有一个元素的情况
        if(head.next == null){
        	return head;
        }
        ListNode i = head;	// i指向第1个
        ListNode j = i.next;	// j指向第2个
        ListNode k = j.next;	// k指向第3个
        
        head = head.next;	
        while(j != null){
        	j.next = i;
        	if(k!=null && k.next!=null){	// 当有偶数个节点 
        		i.next = k.next;
        	}else{		// 当有奇数个节点
        		i.next = k;
        	}
        	
        	// 更新i,j,k的值,前进两格
        	i = k;
        	if(k != null){
        		j = k.next;
        	}else{
        		j = null;
        	}
        	if(k!=null && k.next!=null){
        		k = k.next.next;
        	}else{
        		k = null;
        	}
        }
        return head;
	}
}


重写:

用dummyHead解决奇偶问题,只要两个指针变量就够了

public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null){
        	return head;
        }
        
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode cur = dummyHead;
        ListNode probe = cur.next;
        while(probe!=null && probe.next!=null){
            cur.next = probe.next;
            probe.next = probe.next.next;
            cur.next.next = probe;
            cur = probe;
            probe = probe.next;
        }
        return dummyHead.next;
    }



/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null || head.next==null){
            return head;
        }
        ListNode dm = new ListNode(0);
        dm.next = head;
        ListNode p=dm, q=head, r;
        while(q!=null && q.next!=null){
            p.next = q.next;
            r = q.next.next;
            p.next.next = q;
            q.next = r;
            p = q;
            q = r;
        }
        return dm.next;
    }
}


递归法:

public class Solution {
    public ListNode swapPairs(ListNode head) {
        return rec(head);
    }
    
    public ListNode rec(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
        ListNode p = head;
        ListNode q = p.next.next;
        p.next.next = p;
        ListNode newHead = p.next;
        p.next = rec(q);
        return newHead;
    }
}






AVM环视:系统搭建整体流程 文章目录前言一、畸变矫正鱼眼相机二、透视变换三、图像拼接四、图像融合总结 前言 由于正在做AVM环视,所以记录一下整个过程,归纳为一个系列文章,并对期间遇到的错误进行归纳整理。本文主要概括了AVM环视的大致流程和逻辑,不涉及代码部分,仅供思路参考,其中涉及的具体技术会在后期整理为小章节进行分析。 一、畸变矫正 鱼眼相机 做环视基本上使用到的是鱼眼照片,因为鱼眼相机的视角范围可以达到220°到230°,所以一个相机就可以采集到一个面的全部信息,例如汽车具有四个面,那么在汽车的前后左右分别安装一个鱼眼相机. 阅读详情

相关推荐

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1872

24.swapPairs

24两两交换链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next =

哈哈哈的博客 766

嵌入式存储进阶:除了KV存储,EasyFlash的IAP和LOG功能怎么玩?

本文深入探讨了嵌入式存储方案EasyFlash的高级功能,包括在线固件升级(IAP)和闪存日志存储(LOG)。通过详细解析IAP的双区备份设计和LOG的环形缓冲区架构,提供硬件适配、安全升级流程和日志管理技巧等实战指南,帮助开发者在物联网设备中实现可靠的数据存储和固件更新。

weixin_29280219的博客 413

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

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。函数,它接受一个链表的头节点作为参数,并返回交换相邻节点后的链表头节点。在函数内部,创建一个哑节点。指针指向传入的头节点。哑节点的作用是方便处理链表头部的交换情况。如果存在,将需要交换的两个节点分别保存为。接下来,我们进行节点的交换操作。类,用于表示链表的节点。指针,即为交换相邻节点后的链表头节点。属性表示指向下一个节点的指针。属性表示节点的值,以及一个。

qq_45217161的博客 481

16G显存+llama.cpp跑大模型的黄金配置指南

大语言模型(LLM)本地部署的核心瓶颈在于显存与推理效率的平衡。llama.cpp作为轻量级C/C++推理引擎,通过GGUF模型格式、量化压缩(如Q4_K_M)和CUDA底层优化,显著降低GPU资源需求。在消费级硬件中,16G显存成为兼顾模型能力(如Qwen3-4B、Llama-3-8B)、长上下文支持(4K token)与系统稳定性的关键阈值。它既规避了12G显存的容量焦虑,又绕开了24G高端卡的成本与散热负担,特别适合Windows 11原生环境下的生产级AI应用,如RAG、智能客服与文档分析。

weixin_32629853的博客 404

计算机组成原理实验二 运算器组成实验

事实上,ALU的设计是在全加器的基础上,对全加器功能的扩展来实现符合要求的多种算术/逻辑运算的功能。为了实现多种功能的运算,An、Bn数据是不能直接与全加器相连接的,它们受到功能变量F3—F1的制约,因此,可由An、Bn数据和功能变量F3-F1组合成新的函数Xn 、Yn,然后,再将Xn 、Yn和下一位进位Cn-1通过全加器进行全加运算以实现所需的运算功能。AC寄存器可用来存储ALU的输入以实现两个操作数的运算操作,也可以用来存储来自ALU的结果,以将这些结果反馈给ALU以进行更多的处理。

qq_63574533的博客 1447

swapPairs

Given 1->2->3->4, you should return the list as 2->1->4->3.

song419204664的博客 581

河洛理数【陈抟】先天命卦大运

首先我们把前文提及的天干和地支进行上下划分,那么每一年的年份都是使用一天干和一地支进行组合,即如上的甲子、癸亥,那么下一年就是天干和地支都进行顺延一位进行组合,如甲子年下一年就是乙丑年,但是由于天干是十个、地支有十二个,所以要遍历一遍的话,就正好是 60 年。1924 年 ~ 1983 年(中元) 1984 年 ~ 2043 年(下元) 2044 年 ~ 2103 年(上元)2、找到卦中第一个(从下往上,也就是初爻、二到五爻、上爻)对应时辰的阴阳爻。5、也就是所属的元堂爻。

Daniel专栏 2071

LeetCode 第24题两两交换链表中的节点swapPairs

LeetCode 第24题两两交换链表中的节点swapPairs

weixin_41221502的博客 491

信息传输仿真:卫星通信系统仿真_(12).卫星通信系统仿真软件介绍

卫星通信系统仿真软件是进行卫星通信系统设计和性能优化的重要工具。通过这些软件,用户可以模拟和分析各种通信场景,验证不同的通信协议和算法,优化系统参数和配置。本节介绍了 MATLAB Simulink、NS-3、OPNET 和 SystemVue 的基本功能、特点和配置方法,希望对读者在选择和使用仿真软件时提供参考。在实际应用中,建议根据项目需求和团队能力,综合考虑选择合适的仿真软件。

2401_87715305的博客 1277

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1148

leetcode_swapPairs关于链表.next一不小心就犯错的问题

关于链表head.next.next==p.next,最后一个.next在等号左边相等于指向,等号右边的.next代表下一个节点,所以就相当于head的下一个节点指向了p的下一个节点,然后在代码比较复杂点的情况下,应该定义临时变量引用,以免出不必要的错。//最终想要达到的效果:2->1->4->3->null。//最终想要达到的效果:2->1->4->3->null。//开始前:1->2->3->4->null。//最后返回的是2这个节点。//开始前:1->2->3->4->null。

2203_75335776的博客 280

【Frida Android】实战篇4:SSL Pinning 证书绑定绕过 Hook 教程(一)

在前两章中,我们学习了中间人抓包与 Hook 抓包的基础方法,这些方法在理想环境下能够有效获取网络请求数据。但在实际的企业级应用中,出于安全防护需求,很多 APP 会启用证书绑定(SSL Pinning)机制。这种机制会让客户端对服务器证书的校验更为严格,导致常规的抓包方法(即使将 BurpSuite/Charles 证书安装到系统信任区)也无法生效。因此,从本章开始,我们将系统学习 SSL Pinning 机制的绕过技术。SSL Pinning(证书绑定)是客户端校验服务器身份的进阶安全机制。

水滴石穿 1609

【LeetCode24】两两交换链表中的节点(递归)

文章目录一、题目二、思路三、代码 一、题目 二、思路 可以使用递归方法: 递归终止条件:链表中没有节点,或者只剩下一个节点(不能进行交换了)。 递归体:首先用head保存原始链表的头节点,newhead保存新链表的头节点(即head->next),则原始链表的其他节点开始是newhead->next。解决递归需要清楚递推公式含义:这里递推公式swapPairs()指将给定的链表中的相邻节点两两交换后返回,返回的是交换完成的链表的头节点。所以假设我们已经将head->next后的节点都

发现问题,并解决问题,批判性思维 1858

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

力扣LeetCode #24 两两交换链表中的节点(SwapPairs)

- 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 来源:LeetCode - 示例 给定 1->2->3->4, 你应该返回 2->1->4->3. - 思路分析 思路其实很简单,就是指针一直改变指向并且用next串联起来,就是在指来指去的过程中容易指着指着后面就没了或者进入死循环。 - JAVA实现 public class SwapPairs { public static

weixin_49155948的博客 1009

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[24] Swap Nodes in Pairs 两两交换链表中的节点

[C++]通过引入虚拟头节点来统一操作,并用迭代的方式完成交换

G321666的博客 278

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

5月13日,一日一练

答案 : struct ListNode* swapPairs(struct ListNode* head){ if(head == NULL||head->next == NULL)return head; struct ListNode *newhead = head->next; head->next = swapPairs(newhead->next); newhead->next = head; return newhead; } 提交地址 http...

m0_70598349的博客 110

swap-nodes-in-pairs(成对交换节点)

https://www.nowcoder.com/practice/64a7ee97b02042c189b35e3608e336ae?tpId=46&tqId=29155&tPage=2&rp=2&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking 题目说只能使用常量级别空间,那么可以交换节点的值即可,但是交...

qq_40722582的博客 349

【递归】两两交换链表中的节点

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

Pau_0618的博客 941

【LeetCode 算法】Swap Nodes in Pairs 两两交换链表中的节点

而迭代的处理和正常的思路一样,比较容易理解,空间的消耗相对小。当然这也不是绝对的,具体的问题中的时空复杂度,都会被具体使用的数据结构所影响。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。,所以每个循环中需要处理的就是交换节点,如果整个链表长度为。,处理完最后一个循环,就结束了,如果是。代码相对简单,但是需要对。的流程熟悉,缺点就是对于。链表中节点的数目在范围。,然后再找2个节点,再。,但是流程基本一样。

Cui's Blog 432

Swap Nodes in Pairs

题目描述: Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only consta

记录成长中的点点滴滴 291

【力扣算法19】之 24. 两两交换链表中的节点 python

在不修改节点内部值的情况下,给定一个链表,要求对其中相邻的节点进行两两交换,并返回交换后的链表头节点。本文通过递归的方法解决了这个问题。首先检查链表是否为空或只有一个节点,如果是,则无需交换,直接返回原链表。然后定义prev和cur两个指针,分别指向要交换的两个节点。将prev的next指针指向cur的next节点,即将第一个节点的后继指针指向第三个节点;将cur的next指针指向prev,完成节点的交换。接着递归处理剩余部分的链表,并将返回的结果赋值给prev.next,连接交换后的节点

全栈若城,专注知识分享 1177

两两交换链表中的节点

两两交换链表中的节点。输出:2 1 4 3。

活到老、学到老 1066

Python实现两两交换链表中的节点

题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 Leetcode原题地址:https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 测试用例 示例1 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例2 输入:head = [] 输出:[] 示例3 输入:head = [1] 输出:[1] 代码实现 遍历链表 我们需要两两交

修炼之路 2460

LeetCode swapPairs Python3

题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入: 1 -> 2 -> 3 -> 4 输出: 2 -> 1 -> 4 -> 3 这里只给出递归解法的代码,因为限制于本人水平,迭代解法没有图真的很难说清楚……: class Solution: def swa...

Whisper321的博客 404

算法38--Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3->4, you should return the list as 2->1->4->3Note: Your algorithm should use only co...

大魔王 614
上一篇: Count and Say 数数并打印 @LeetCode
下一篇: 经典题:罗马数字和阿拉伯数字的相互转换
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值