/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *reverseKGroup(ListNode *head, int k) {
if(head == NULL) {
return head;
}
ListNode * dummyHead = new ListNode(-1);
dummyHead->next = head;
ListNode * follower = dummyHead;
ListNode * faster = dummyHead;
while(faster != NULL && follower != NULL) {
int i = 0;
for(; i < k && faster != NULL; ++i) {
faster = faster->next;
}
if(faster == NULL) {
break;
}
ListNode * temp = faster->next;
faster->next = NULL;
ListNode * ret = reverseLinkedList(follower->next);
follower->next = ret;
ListNode * p = follower;
while(p->next != NULL) {
p = p->next;
}
p->next = temp;
follower = p;
faster = p;
}
return dummyHead->next;
}
ListNode *reverseLinkedList(ListNode *head) {
ListNode * dummyHead = new ListNode(-1);
dummyHead->next = head;
ListNode * p = dummyHead;
ListNode * result = new ListNode(-1);
ListNode * q = result;
while(p->next != NULL) {
while(p->next != NULL && p->next->next != NULL) {
p = p->next;
}
q->next = p->next;
p->next = NULL;
p = dummyHead;
q = q->next;
}
delete dummyHead;
ListNode * ret = result->next;
result->next = NULL;
delete result;
return ret;
}
};
4/05/2014
Leetcode -- Reverse Nodes in k-Group
Apr.05, 2014 Ugly Solution, can improve
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment