Leetcode25. K 个一组翻转链表(头插法反转)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode25. K 个一组翻转链表(头插法反转)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/

解题思路

刚刚才做了反转链表Ⅱ发现这题是那题的升级版,但是在答案区都没见到这种做法,所以我就来写一下基于反转链表Ⅱ的做法。
首先统计一下链表长度,为了计算要进行多少次反转。然后我们每次用pre记录要反转的头节点的前一个节点,接下来就是反转链表Ⅱ中的操作了,知道头节点,反转接下来的k个节点,直接用头插法。

代码

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode newHead = new ListNode(-1, head);  //新头节点
        ListNode pre = newHead; //指向要反转的节点的前一个节点
        ListNode t = head;  //记录链表长度
        int s = 0;
        while(t != null) {
            t = t.next;
            s++;
        }
        ListNode cur, next;
        for(int j = 0; j < s / k; j++) {    //一共进行s/k次反转
            cur = pre.next;     
            for(int i = 1; i < k; i++) {
                next = cur.next;
                cur.next = next.next;
                next.next = pre.next;
                pre.next = next;
            }
            pre = cur;
        }
        return newHead.next;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

以上是关于Leetcode25. K 个一组翻转链表(头插法反转)的主要内容,如果未能解决你的问题,请参考以下文章

leetCode 25 K个一组翻转链表

LeetCode 25. K 个一组翻转链表 | Python

LeetCode25. K 个一组翻转链表

LeetCode-25.k个一组翻转链表

算法leetcode|25. K 个一组翻转链表(rust重拳出击)

算法leetcode|25. K 个一组翻转链表(rust重拳出击)