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 个一组翻转链表 | Python