leetcode Reverse Nodes in k-Group

来源:互联网 发布:mac调用finder快捷键 编辑:程序博客网 时间:2024/05/16 11:00
class Solution {//1public:    ListNode* reverseKGroup(ListNode* head, int k) //递归思想很好    {        ListNode* ptr = head;        for (int i = 0; i < k; ++i){            if (ptr == NULL)                return head;            else ptr = ptr->next;        }        ListNode* new_head = reverse(head, k);        head->next = reverseKGroup(ptr,k);        return new_head;    }    ListNode* reverse(ListNode* head, int k){        ListNode* prev = new ListNode(0);        for (int i = 0; i < k; ++i){            ListNode* tmp = head->next;            head->next = prev->next;            prev->next = head;            head = tmp;        }        return prev->next;    }};


class Solution {//2public:    ListNode* reverseKGroup(ListNode* head, int k) {         int size = listSizeModified(head, k);        if (size == 0)            return head;                    ListNode *ptr = head,                 *priorPtr = new ListNode(0),//添加一个头结点                 *retPtr = priorPtr,                 *tailPtr;                while (size > 0){            for (int i = 0; i < k; ++i){                if (i == 0)                    tailPtr = ptr;                ListNode* tmpPtr = ptr->next;                ptr->next = priorPtr->next;                priorPtr->next = ptr;                ptr = tmpPtr;                if (i == k - 1){                    tailPtr->next = ptr;                    priorPtr = tailPtr;                }                size--;            }        }        return retPtr->next;    }    int listSizeModified(ListNode* head, int k){        int count = 0;        while (head != NULL){            head = head->next;            count++;        }        return count - count % k;    }};


1 0