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进行存储后,方便后续的交换。

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

相关推荐
程序员清风几秒前
记忆系统设计:让 Agent 拥有短期记忆与长期记忆
java·服务器·网络
EatFan9 分钟前
前后端分离项目中 Token 到底应该怎么设计?Access Token + Refresh Token 实战
java·前端·后端
麻瓜code14 分钟前
[Agent]Spring AI 工具调用实战:让大模型真正“干活“(@Tool 六大工具 + 统一注册)
java·人工智能·spring
vx-程序开发22 分钟前
【毕设分享】springboot废品上门回收微信小程序---附源码94491
java·spring boot·毕业设计·源码·课程设计·毕设·大作业
宸津-代码粉碎机23 分钟前
Spring AI 高危CVE漏洞深度复盘|生产禁跑版本汇总+临时防御+修复方案
java·大数据·人工智能·python·spring
xiangyun6133 分钟前
【408数据结构 03】线性表与顺序表:C++手写SeqList
开发语言·数据结构·c++
敲代码的嘎仔1 小时前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
爱吃苹果的日记本1 小时前
数据结构第三课补充(空间复杂度)
数据结构·学习
多弗朗皮卡丘1 小时前
数据结构6:队列
c语言·数据结构
xxxiugou1231 小时前
双指针解题秘籍:从入门到精通
c语言·数据结构·c++·算法