24. 交换链表相邻节点Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.
For example,Given 1->2->3->4,
you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

本题的大意就是交换链表中相邻的结点,限定常数的空间复杂度

解析:

  • 因为是两两交换结点,因此我们可以将“一个很长的链表进行两两反转结点”这个大问题分解成一个个像“反转只有两个结点or更少”这样的子问题,又因为每个子问题都是相同的,因此我们可以采用分支策略(递归)

  • 算法描述:


    24. 交换链表相邻节点Swap Nodes in Pairs_第1张图片
    Paste_Image.png
  • 注意事项:
    递归一定要注意递归出口,注意栈溢出

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null)
            return null;
        if(head.next == null)
            return head;
            
        ListNode temp = head.next;
        head.next = swapPairs(temp.next);
        temp.next = head;
        return temp;
    }
}

你可能感兴趣的:(24. 交换链表相邻节点Swap Nodes in Pairs)