LeetCode-Reverse Nodes in k-Group

来源:互联网 发布:java根据ip获取运营商 编辑:程序博客网 时间:2024/05/19 07:10

题意:将列表每K个反转一次。
如k=2,1-2-3-4-5 2-1-4-3-5
如k=3,1-2-3-4-5 3-2-1-4-5

反转方法是pre-cur-nxt pre是开始链表的头结点人为加的,是k数组前一个,last是k数组中首位,next是k数组后一个,这里将每次cur都暂存在pre的next中,使用dummy作为pre来进行,

class Solution {public:    ListNode *reverseKGroup(ListNode *head, int k) {        if (!head || k == 1) return head;        ListNode *dummy = new ListNode(-1);        ListNode *pre = dummy, *cur = head;        dummy->next = head;        int i = 0;        while (cur) {            ++i;            if (i % k == 0) {                pre = reverseOneGroup(pre, cur->next);                cur = pre->next;            } else {                cur = cur->next;            }        }        return dummy->next;    }    ListNode *reverseOneGroup(ListNode *pre, ListNode *next) {        ListNode *last = pre->next;        ListNode *cur = last->next;        while(cur != next) {            last->next = cur->next;            cur->next = pre->next;            pre->next = cur;            cur = last->next;        }        return last;    }};