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

Popular posts from this blog

算法的比较