day11两两交换链表中的节点

该文章提供了一个Java代码示例,解决如何在链表中两两交换节点的问题。通过创建辅助指针i,j和index,遍历链表并调整节点的next指针,实现了两两交换。特别地,当链表长度为奇数时,会检查前一个指针i的next是否为空以避免空指针异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目描述

题目链接:24. 两两交换链表中的节点

2.题解

 

 想说的都在图里了。

3.代码示例

/**
 * 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 = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        //创建要用到的三个指针
        ListNode i=new ListNode();
        ListNode j=new ListNode();
        ListNode index=new ListNode();
        //若链表为空或只有一个元素则返回其本身
        if(head==null||head.next==null)
            return head;
        i=head;//i指向第一个元素
        j=head.next;//j指向第二个元素
        head=j;//最终的head肯定是指向第二个元素
        index=i;
        while(true){
            i.next=j.next;//第一步
            j.next=i;//第二布
            i=index.next;//第三步
            //若链表有奇数个且遍历到最后一个则直接结束循环
            if(i==null||i.next==null)
                break;
            j=i.next;//第四步
            index.next=j;//第五步
            index=i;//第六步
        }
        return head;
    }
}

4.问题总结

i.当链表有奇数个时

        判断前一个指针(即 i )的next是否为空,若为空则遍历到最后一个元素,直接结束循环即可。

ii.以上判断操作中要加上一个对 i 是否为空的判断,是为了避免空指针的异常,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值