1、遍历链表得到链表的长度length;
2、得到链表的长度是为了获取链表翻转的次数(length / k),循环翻转链表即可。
时间复杂度:o(n)
空间复杂度:o(1)
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
//特殊情况处理
if (k == 1 || head == nullptr || head->next == nullptr)
return head;
//设置表头
ListNode* res = new ListNode(0);
res->next = head;
ListNode* pre = res;
ListNode* cur = head;
//获取链表长度
int length = 0;
ListNode* phead = head;
while(phead != nullptr) {
length++;
phead = phead->next;
}
if(k > length)
return head;
else {
//翻转链表
for(int i = 0; i < length / k; i++) {
for(int i = 1; i < k; i++) {
ListNode* ptemp = cur->next;
cur->next = ptemp->next;
ptemp->next = pre->next;
pre->next = ptemp;
}
pre = cur;
cur = cur->next;
}
}
return res->next;
}
};

京公网安备 11010502036488号