Leetcode面试经典题-24.两两交换链表中的节点

解法都在代码里,不懂就留言或者私信

这里先写一个递归的解,如果后面有时间,我再写个迭代的

java 复制代码
/**
 * 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) {
        /**先来个递归的解,head我们认为是当前段的开头,然后head.next是要和head交换的,然后返回head.next
        然后原来的head(当前对的最后一个节点)连接后一个对的反转之后的节点*/
        if(head == null || head.next == null) {
            /**如果当前对是空或者只有一个,不可能完成交换 */
            return head;
        }
        /**如果当前对够两个,先拿到head.next作为当前对反转之后的头,也是需要返回的值*/
        ListNode newHead = head.next;
        /**拿到下一个对的开头 */
        ListNode nextStart = newHead.next;
        /**反转当前对的关系,也就是next指针的指向,newHead的next指向老的头 */
        newHead.next = head;
        /**老的头的next指向下一段的交换后的头 */
        head.next = swapPairs(nextStart);
        /**返回当前段的头 */
        return newHead;

    }
}
相关推荐
wen__xvn6 小时前
代码随想录算法训练营DAY14第六章 二叉树 part02
数据结构·算法·leetcode
Ka1Yan6 小时前
[数组] - 代码随想录(2-6)
数据结构·算法·leetcode
漫随流水7 小时前
leetcode算法(104.二叉树的最大深度)
数据结构·算法·leetcode·二叉树
xlp666hub7 小时前
Linux 设备模型学习笔记(1)
面试·嵌入式
南囝coding8 小时前
CSS终于能做瀑布流了!三行代码搞定,告别JavaScript布局
前端·后端·面试
踏浪无痕9 小时前
Go 的协程是线程吗?别被"轻量级线程"骗了
后端·面试·go
一只叫煤球的猫10 小时前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
求梦82010 小时前
字节前端面试复盘
面试·职场和发展
圣保罗的大教堂10 小时前
leetcode 3453. 分割正方形 I 中等
leetcode
千金裘换酒10 小时前
LeetCode 二叉树的最大深度 递归+层序遍历
算法·leetcode·职场和发展