leetcode Reverse Nodes in k-Group

Two problems: 

1. Counting the length is much easier than reversing the last less than k nodes. 

2.  Don't forget:

lastGroupTail->next = p;


 

 

/**
 * 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) {
    // IMPORTANT: Please reset any member data you declared, as
    // the same Solution instance will be reused for each test case.
    if (k <= 1 || head == NULL)
      return head;
    ListNode* dummy = new ListNode(0);
    dummy->next = head;
    ListNode *p = head, *last = NULL, *next = NULL, *lastGroupTail = dummy, *curGroupTail = NULL, *res = NULL;
    int count = 1, len = 0;
    for(p = head; p != NULL; p = p->next, ++len);
    p = head;
    int countmax = len / k * k;
    while (p != NULL && count <= countmax) {
      next = p->next;
      if (count % k == 1)
        curGroupTail = p;
      else if (count % k == 0) {
        lastGroupTail->next = p;
        lastGroupTail = curGroupTail;
      }
      p->next = last;
      ++count;
      last = p;
      p = next;
    }
    lastGroupTail->next = p;
    res = dummy->next;
    return res;
  }
};


 

 

posted @ 2013-10-31 21:10  pangbangb  阅读(184)  评论(0编辑  收藏  举报