Leetcode刷题记录-24

这篇博客详细介绍了如何解决LeetCode第24题——两两交换链表中的节点。作者提出了一个算法,通过使用四个指针n1, n2, n3, n4来跟踪需要交换的节点,确保正确地交换相邻节点并更新它们的前一个和后一个节点。在循环中不断进行交换,直到没有更多的节点可以交换。博客特别强调了处理边界条件和链表结构的重要性。
摘要由CSDN通过智能技术生成

Leetcode-24. 两两交换链表中的节点

题目链接

1.题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

我的想法是,用两个指针n2,n3指向需要转换的两个节点,然后n1,n4指向转换的两个节点的前一个结点和后一个结点
循环进行n2和n3的转换

代码如下:

		if (head == null || head.next == null) {
            return head;
        }
        ListNode n1, n2, n3, n4;
        n1 = null;
        n2 = head;
        n3 = n2.next;
        head = n3;
        n4 = n3.next;

        while (n3 != null) {
            n3.next = n2;
            n2.next = n4;
            if (n1 != null) {
                n1.next = n3;
            }

            if (n4 != null && n4.next != null) {
                n1 = n2;
                n2 = n4;
                n3 = n4.next;
                if (n3 != null) {
                    n4 = n3.next;
                }
                
            } else {
                break;
            }

        }
        return head;
    }

总结

1.链表为空和只有一个可以直接返回head的情况
2.转换两个结点后,他的前一个结点和后一个结点应该是什么需要搞清楚
3.最后跳出循环时,指针出现空的情况就不能有next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值