给一个链表,每k个反转一下,最后不够的不反转。
写了半天,实在是太弱了。
struct XNode{
ListNode *t1, *t2;
int flag;
};
class Solution {
public:
XNode dfs( ListNode* pre, ListNode* nows, int cnt, int k ){
//if( nows == NULL )
if( cnt >= k ){
if( nows->next != NULL ){
XNode temp = dfs( NULL, nows->next, 1, k );
XNode temp1;
temp1.t1 = nows;
temp1.t2 = temp.t1;
temp1.flag = 0;
if(pre != NULL )nows->next = pre;
return temp1;
}else{
XNode temp1;
temp1.t1 = nows;
temp1.t2 = NULL;
temp1.flag = 0;
if(pre != NULL )nows->next = pre;
return temp1;
}
}
if( nows->next == NULL ){
XNode temp;
temp.flag = 1;
if( pre == NULL ){
temp.t1 = nows;
}
return temp;
}
XNode temp = dfs( nows, nows->next, cnt + 1, k );
//if( temp == NULL ) return NULL;
if( temp.flag ){
if( pre == NULL ){
XNode temp;
temp.t1 = nows;
return temp;
}
}else{
if( pre == NULL ){
nows->next = temp.t2;
}else{
nows->next = pre;
}
}
return temp;
}
ListNode* reverseKGroup(ListNode* head, int k) {
if( head == NULL ) return NULL;
ListNode *temp = head, *ans;
int cnt = 1;
while( cnt < k && temp->next != NULL ){
cnt++;
temp = temp->next;
}
if( cnt < k ){
ans = head;
return ans;
}else{
ans = temp;
}
dfs( NULL, head, 1, k );
return ans;
}
};