题目描述
将给定的链表中每两个相邻的节点交换一次,返回链表的头指针
例如,
给出1->2->3->4,你应该返回链表2->1->4->3。
你给出的算法只能使用常量级的空间。你不能修改列表中的值,只能修改节点本身。
思路:
每次将相邻节点的第二个节点的next指针指向前一个节点,然后第一个节点的指针要指向下一组已经反转的相邻节点的第一个节点,很明显可以使用递归,反转当前的一组相邻节点,先反转下一组相邻节点
public class Solution {
public ListNode swapPairs(ListNode head) {
//递归出口
if(head == null || head.next == null)
return head;
//每组相邻节点的第二个节点
ListNode newNode = head.next;
//每组相邻节点的第一个节点的next指针指向下一组已反转的第一个节点
head.next = swapPairs(head.next.next);
//每组相邻节点的第二个节点的next指针指向改组的第一个节点
newNode.next = head;
return newNode;
}
}