24. 两两交换链表中的节点

题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/

24. 两两交换链表中的节点_第1张图片

解题思路:可以先两两交换最左边的两个节点,然后在两两交换第三个和第四个节点,然后继续下去直到最后一个节点,很明显可以分解为子问题来做,使用递归求解

  1. 定义递归方程:swapPairs(ListNode head):两两交换已head为头节点的链表,返回交换后链表的头节点

  1. 递归终止条件

  1. 当head=null时:无需交换,直接返回null

  1. 否则当head.next = null时,只有一个节点无需交换,直接返回head

  1. 否则

  1. 设新头节点为newHead,因为要相邻节点两两交换,显然,新的头节点应该为head.next,令newHead=head.next

  1. 这里需要保存一下第三个节点,third= head.next.next。

  1. 第二个节点就是head了,newHead.next=head

  1. 那么第二个节点的下一个节点就是从第三个节点开始一直到最后两两交换后的链表的头节点(该头节点就是swapPair(third)),所以newHead.next.next=swapPairs(third),

AC代码:

class Solution {
    public static ListNode swapPairs(ListNode head) {
        if (head == null)
            return null;
        if (head.next == null)
            return head;
        ListNode newHead = head.next;
        ListNode third = head.next.next;
        newHead.next = head;
        newHead.next.next = swapPairs(third);
        return newHead;
    }
}

你可能感兴趣的:(LeetCode_Java版,递归,链表,数据结构,leetcode)