/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reverseSub(ListNode* head, ListNode** new_head,
ListNode** next_head, ListNode** tail, int k)
{
ListNode* tmp[k] = {NULL};
ListNode* p = head;
int i = 0,j;
while(i<k && p != NULL)
{
tmp[i++] = p;
p = p->next;
}
if (i == k)
{
for (j=0; j<k; j++)
tmp[j]->next = NULL;
j = k -1;
while (j>0)
{
tmp[j]->next = tmp[j-1];
j--;
}
tmp[0]->next = p;
*new_head = tmp[k-1];
*tail = tmp[0];
*next_head = p;
}
else
{
*new_head = head;
*next_head = NULL;
*tail = NULL;
}
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode *res_head =NULL;
ListNode *new_head = NULL;
ListNode *tail = NULL;
ListNode *pre_tail = NULL;
ListNode *cur_process = head;
ListNode *next_process = NULL;
while(cur_process)
{
reverseSub(cur_process, &new_head, &next_process, &tail, k);
if (res_head == NULL)
{
res_head = new_head;
}
if (pre_tail)
pre_tail->next = new_head;
cur_process = next_process;
next_process = NULL;
pre_tail = tail;
}
return res_head;
}
};
Reverse Nodes in k-Group
最新推荐文章于 2024-06-05 22:52:48 发布