LeetCode24两两交换链表中的节点(java实现)

今天来分享的题目是Leetcode上的24题,首先我们来看下题目描述。

这里我们注意题目的要求是交换的是两个节点,而并非是交换节点中的值 。

我们的解题思路如下:

首先是定义一个虚拟头结点vir,这样方便我们操作第一个头结点,虚拟头结点vir.next指向的是头节点,起初头结点是指向的节点1 ,那么我们想要做的是让vir指向节点2 ,然后让节点2指向节点1 ,让节点1指向节点3 ,这样就完成了节点1和节点2的交换。

那么具体的实现代码如下:

java 复制代码
 public ListNode swapPairs(ListNode head) {
        ListNode vir=new ListNode();
        //定义虚拟头结点
        vir.next=head;
        ListNode cur =vir;
        while (cur.next!=null&&cur.next.next!=null){
            //定义临时变量存放cur.next和cur.next.next
            ListNode tem=cur.next;
            ListNode tem1=cur.next.next.next;
            //交换第一和第二个节点
          cur.next=cur.next.next;
          cur.next.next=tem;
          //让节点1的.next指向节点3
        tem.next=tem1;
        //移动cur进行下一步的交换,cur始终指向的是欲要进行操作的节点的前一个节点。
        cur=cur.next.next;


        }
        //将vir.next返回,无论节点如何变化vir.next永远指向头结点。
    return vir.next;

    }

我们来结合代码进行进一步的分析,首先是我们的while循环,while循环中的两个判断条件分别是对当链表中的节点为奇数时的怕判断条件以及当链表中的节点为偶数时的判断条件,那么为什么cur.next!=null&&cur.next.next!=null

中间的判断不是||而是&&呢?并且是cur.next!=null的判断在前,cur.next.next的判断条件在后,这是因为&&是两个条件都满足才会真,而||是一真便真,如果cur.next.next!=null放在前面会导致程序陷入死循环。所以这个两个条件的判断前后顺序是不能变的 。

需要注意的点是,在进行节点交换之前,需要对节点的位置用临时变量进行存储 ,例如上图中的,我们需要先将节点1和节点3进行存储后,方便后续的交换。

那么本期的算法题目思路以及代码的分享就到这里结束了,如果觉得博主写的对你有帮助,创作不易,希望帮博主点一个小爱心♥♥♥谢谢!(●ˇ∀ˇ●)

相关推荐
黑马程序员毕设21 分钟前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff23 分钟前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff26 分钟前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
w_zero_one3 小时前
递归算法(一)
java·开发语言·算法
SL_staff3 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华4 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊4 小时前
LeetCode1881~1990题目解析
java·leetcode
十碗饭吃不饱4 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
T_Wizard5 小时前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI5 小时前
JEV的用法
java·前端·数据库