题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/**
- struct ListNode {
- int val;
- struct ListNode *next;
- }; */
class Solution { public: /** * * @param head ListNode类 * @param k int整型 * @return ListNode类 / ListNode reverseKGroup(ListNode* head, int k) { //本例中,head节点也存储了数据 // write code here if(head==NULL) //空链表处理办法 return head; if(k==1) //k=1,不进行反转操作 return head;
int count=1;
ListNode* res=new ListNode(-1); //head节点存储了数据,设置结点res,使其指向head
res->next=head;
ListNode* tra=head;
while(tra->next!=NULL) //先遍历链表,统计节点数
{
count++;
tra=tra->next;
}
int time=count/k; //判断有几个区间需要反转
ListNode* pre=res;
ListNode* cur=res->next;
for(int i=1;i<=time;i++)
{
for(int j=1;j<=k-1;j++) //在某一个区间内的反转操作
{
ListNode* tmp=cur->next;
cur->next=tmp->next;
tmp->next=pre->next;
pre->next=tmp;
}
//重新设置pre和cur指针指向的结点,以便进行下一组的操作
pre=cur;
cur=cur->next;
}
return res->next;
}
};