Reverse Nodes in k-Group(leetcodeとは異なる)
テーマがどういう意味なのか理解できなかったが、自分が別の状況を実現した.
/*
, :
Input:
[0,3,8,4,1,9,3]
9
Output:
[3,0,4,8,9,1,3]
k<sum, k ; k>sum, k%sum ; k=1 k%sum=1, return head
*/
ListNode* reverseKGroup(ListNode* head, int k) {
if(head == NULL || head->next == NULL || k==1)
return head;
ListNode* p1=head, *p2 = head, *ends = head,*begins = head;
ListNode* p = head;
int sum = 0;
while(p){
++sum;
p = p->next;
}
if(k>=sum)
k = k%sum;
if(k==0){
p2 = p1->next;
p = head;
while(p2){
p1->next = p;
if(p == head)
p->next = NULL;
p = p1;
p1 = p2;
p2 = p2->next;
}
p1->next = p;
head = p1;
}else{
int times = sum/k;
int i = 1;
ListNode* paper = new ListNode(0); // ,
ListNode* pp = paper;
while(i <= times){
p = begins;
p1 = begins;
p2 = begins;
int s = k;
while(--s)
p2 = p2->next;
begins = p2->next;
p2->next = NULL;
//ends = p2;
p1 = p->next;
p2= p1->next;
p1->next = p;
p->next = NULL;
while(p2 != NULL){
//
p = p1;
p1 = p2;
p2 = p2->next;
p1->next = p;
}
/*
p = p1;
p1 = p2;
p1->next = p;
*/
pp->next = p1;
while(pp->next!=NULL)
pp = pp->next;
++i;
}
if(sum%k != 0 )
pp->next = begins;
head = paper->next;
}
return head;
}