码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode题解]24. 两两交换链表中的节点 | 递归

时间:2020-11-25 12:29:02      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:linked   fir   ini   second   tno   his   pair   sha   head   

方法一:递归

解题思路

递归法,假设后续链表已经完成交换,此时只需要对前两个节点进行交换,然后再连接上后续已交换的链表即可。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode SwapPairs(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }

        ListNode next = head.next.next;

        ListNode first = head, second = head.next;
        second.next = first;
        first.next = SwapPairs(next);
        
        return second;
    }
}

复杂度分析

  • 时间复杂度:\(O(n)\),其中 \(n\) 是链表的长度。一共调用 \(n/2\) 次,交换所用时间复杂度为 \(O(1)\),因此总的时间复杂度为 \(O(n)\)
  • 空间复杂度:\(O(n)\),其中 \(n\) 是链表的长度。一共调用 \(n/2\) 次,因此需要额外的 \(O(n)\)空间作为调用栈。

[LeetCode题解]24. 两两交换链表中的节点 | 递归

标签:linked   fir   ini   second   tno   his   pair   sha   head   

原文地址:https://www.cnblogs.com/liang24/p/14016027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!