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

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

相关推荐
小bo波10 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103512 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师2 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师2 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_02 天前
mac(m5)平台编译openjdk
java
唐青枫3 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马3 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261353 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261353 天前
Java 打印 Word 文档:从基础打印到高级设置
java