leetcode之Reverse Nodes in k-Group
阿新 • • 發佈:2018-12-14
題目:
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
Note:
- Only constant extra memory is allowed.
- You may not alter the values in the list's nodes, only nodes itself may be changed.
程式碼:
class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { if (!head)return NULL; if (!head->next)return head; ListNode* first=new ListNode(-1); first->next = head; ListNode* p = head; int t = 0; while (p) { t++; p = p->next; } int times = t / k; ListNode* current = NULL; ListNode* q = head; int i = 0; while ((times--)>0) { int m = k; while ((--m)>0) { if (i == 0) { ListNode* m = q->next; q->next = m->next; m->next = first->next; first->next = m; } else { ListNode* m = q->next; q->next = m->next; m->next = current->next; current->next = m; } } current = q; q = current->next; ++i; } return first->next; } };