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

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

相关推荐
WiChP1 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
cch89181 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神2 小时前
拉链表概念与基本设计
java·开发语言·数据库
cch89182 小时前
汇编与Go:底层到高层的编程差异
java·汇编·golang
chushiyunen2 小时前
python中的@Property和@Setter
java·开发语言·python
禾小西2 小时前
Java中使用正则表达式核心解析
java·python·正则表达式
yoyo_zzm2 小时前
JAVA (Springboot) i18n国际化语言配置
java·spring boot·python
APIshop2 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Mr.Entropy3 小时前
springboot2.x集成Flyway
java