450. Reverse Nodes in k-Group
class Solution {
public:
/**
* @param head: a ListNode
* @param k: An integer
* @return: a ListNode
*/
ListNode * reverseKGroup(ListNode * head, int k) {
// write your code here
//1, find every K; 2, reverse K elements; 3, connect
if(head == NULL || head->next == NULL || k == 1){
return head;
}
int cnt = 0;
ListNode *dummy = new ListNode(0);
ListNode *copy = dummy;
while(head != NULL){
ListNode *start = head;
while(head != NULL && cnt < k){
head = head->next;
cnt++;
}
if(cnt == k){
ListNode* newStart = reverse(start, head);
dummy->next = newStart;
start->next = head;
dummy = start;
cnt = 0;
}
}
return copy->next;
}
ListNode *reverse(ListNode *start, ListNode *end){
ListNode *pre = NULL;
while(start != end){
ListNode *tmp = start->next;
start->next = pre;
pre = start;
start = tmp;
}
return pre;
}
};
Comments
Post a Comment