给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 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;
}
}
标签:24,head,ListNode,交换,next,链表,节点
From: https://www.cnblogs.com/java-cheng/p/18471517