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

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:

输入:head = []
输出:[]
示例 3:

输入:head = [1]
输出:[1]

解题思路:
1.递归方法实现节点对的交换,首先到达链表的末尾,然后逐步交换回链表的开头

完整代码:
    /**
     * 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 {
        /**
         * 公共方法交换节点对
         * 该方法作为对外接口,提供一对节点的交换功能
         *
         * @param head 链表的头节点
         * @return 交换后的链表头节点
         */
        public ListNode swapPairs(ListNode head) {
            return swap(head);
        }

        /**
         * 递归方法实现节点对的交换
         * 该方法用于递归地交换链表中的每一对节点
         * 它的工作原理是首先到达链表的末尾,然后逐步交换回链表的开头
         *
         * @param head 链表的当前头节点
         * @return 交换后的当前链表的头节点
         */
        public ListNode swap(ListNode head){
            // 当链表为空或只有一个节点时,不需要交换,直接返回原链表
            if(head == null || head.next == null){
                return head;
            }
            // 获取当前节点的下一个节点,这是即将交换的节点
            ListNode next = head.next;
            // 递归交换后续节点对,并将当前节点连接到交换后链表的末尾
            head.next = swap(next.next);
            // 将下一个节点连接到当前节点,完成这一对节点的交换
            next.next = head;
            // 返回交换后的链表头节点,即原链表中当前节点的下一个节点
            return next;
        }
    }
posted @ 2024-10-17 10:26  JAVA-CHENG  阅读(9)  评论(0编辑  收藏  举报