题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
解题思路:
通过递归的方式进行两两交换链表中的结点,递归的中止条件是链表中没有结点活着只有只有一个结点,无法进行交换。通过对链表中的每个值的大小进行比较,当只有两个结点时,第一个结点与头结点进行交换,通过不断的递归完成对结点的替换。设置两个链表,一个新链表,一个旧链表,新链表的头节点设为newhead,旧链表的头结点设为head。旧链表的第二个结点即为newhead.next,通过head.next = newhead.next完成替换。
时间复杂度:O(n)
空间复杂度:O(n)
public class Solution {
public ListNode swappairs(ListNode head){
if (head == null || head.next == null){
return head;
}
ListNode newhead = head.next;
head.next = swappairs(newhead.next);
newhead.next = head;
return newhead;
}
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; }
}
}