题解 | #合并两个排序的链表#
链表中的节点每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) {
int len = 0;
ListNode* p = head;
while(p!=nullptr){
p = p->next;
len++;
}
if(len < k || head == nullptr){
return head;
}else{// {1,3,2,9,4,6,2,7},3
ListNode* newHead = new ListNode(-1);
newHead->next = head;
p = newHead;
int times = len / k;
while(times--){
int n = k;
while(--n){
ListNode* t = new ListNode(p->next->val);
ListNode* tlast = next(p,n + 1);
t->next = tlast->next;
tlast->next = t;
p->next = p->next->next;
}
p = next(p,k);
}
return newHead->next;
}
}
ListNode* next(ListNode* &head,int len){
ListNode* p = head;
while(len--){
p = p->next;
}
return p;
}
};