25. Reverse Nodes in k-Group

来源:互联网 发布:苹果怎么授权给软件 编辑:程序博客网 时间:2024/06/07 15:46

LeetCode链接
描述:给一个链表,对间隔为k个元素翻转
要求:不能改变链表的值,
空间复杂度为常量
例子:
指定链表:1->2->3->4->5
k=2,输出:2->1->4->3->5
k=3,输出:3->2->1->4->5

class Solution {public:    ListNode* reverseKGroup(ListNode* head, int k) {        //防止头指针丢失        ListNode* guard=new ListNode(0);        guard->next=head;        head=guard;        for(;;){            int res_node=0;            //要交换的第k个元素的下一个            ListNode* last=head->next;            //统计链表还剩多少个            for (int j=0;j<k;j++){                if(last==NULL)                    break;                res_node+=1;                last=last->next;            }            if(res_node<k)                break;            //要交换的第一个元素            ListNode*first=head->next;            for(int j=0;j<k;j++){                int index=k-j-1;                ListNode*aim=first;                while(index--){                    aim=aim->next;                }                //把第K个节点放到前面去                head->next=aim;                head=aim;            }           head->next=last;         }       return guard->next;    }};