题目描述
给定一个链表,每两个相邻节点交换一次,并返回它的头部。
您不能修改列表节点中的值,只能修改节点本身。
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
解决
每次将相邻节点的第二个节点的next指针指向前一个节点,然后第一个节点的指针要指向下一组已经反转的相邻节点的第一个节点,很明显可以使用递归,反转当前的一组相邻节点,先反转下一组相邻节点
代码:
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;
}