给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 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;}}