乐趣区

LeetCode之24-两两交换链表中的节点

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

示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
分析:两两递归,每两个节点当一个整体,进行交换,前个合并节点指向下一个合并节点的前一个节点。


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {val = x;}
 * }
 */
class Solution {public ListNode swapPairs(ListNode head) {
        // 如果是 null 节点或者单个节点直接返回 head
        if(head==null||head.next==null){return head;}
        // 拿到后节点
        ListNode next=head.next;
        // 把前节点的指针指向下个合并节点的前节点
        head.next=swapPairs(next.next);
        // 节点调换
        next.next=head;
        // 返回调换后的节点
        return next;
    }
}
退出移动版