题解 | #链表中的节点每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) {
// write code here
/* 基于反向链表,递归每一个区间就行了。一直在想怎么把区间排序后的尾部节点指向下一个区间的头节点,绕了
一大圈,队列都用上了。后来猛然发现。当前区间的头指针就是指向反转后的尾节点,麻了*/
int cursize = 0; ListNode* temphead = head;int tempk = k;
while(temphead){
cursize++;
temphead = temphead ->next;
}
if(head == nullptr || cursize < k){
return head;
}
ListNode* p1 = nullptr;ListNode* p2 = head; ListNode* p3 = head->next;
while(tempk--){
p2->next = p1;
p1 = p2;p2 = p3;
if(p3){p3 = p3->next;}
}
head->next = reverseKGroup(p2, k); // 递归下一个区间,null或者尺寸小不做处理
return p1;
}
};