Fork me on GitHub

leetcode24,交换链表相邻的节点

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

 

对于这样链表交换的题目,我一般都有两种解法。

第一种,看链表每个节点带有的数据量,这道题带有只有一个value值,只有一个int值,所以我一开始的想法就是,不真实的交换节点,只是交换里面的数据。

这样的好处是空间复杂度特别省,适合那些每个节点数据很少,要求不高的链表交换。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null)
            return head;
        
        ListNode A = head;
        ListNode B = head.next;
        
        int t;
        while(A != null && B != null){
            t = B.val;
            B.val = A.val;
            A.val = t;
            
            if(B.next == null)
                break;
            A = B.next;
            B = B.next.next;
        }
        
        return head;
    }
}
复制代码

第二种解法就是真的去交换节点。

那么就需要多余的节点去记录当前结点的情况然后去交换

我用h,1,2,3这4个节点来说明。

123是原来的节点。

而h是头节点,指向1

 

下面是交换的步骤。

h->1->2->3

1->3(这个3通过2.next找)

h->2(这个直接有2)

h->->1(这个1也是直接有)

h->3(这个3通过1.next找)

image

posted @   LinkinStar  阅读(2437)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示