Description:
题目大意:单项链表中每 k 个元素反转
解题思路:
算法标签:递归
代码:
/*
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
// 反转区间 [cur,right) 的元素
ListNode* reverse(ListNode* cur,ListNode* right) {
ListNode* pre = right;
// 反转链表,right 相当于原来的 NULL 尾指针
// cur 从最左边开始
while(cur != right) {
// 存储 cur 的下一个节点
ListNode* node = cur -> next;
// cur 的下一个节点指向前一个节点
cur -> next = pre;
// 前一个节点右移
pre = cur;
// 当前节点右移
cur = node;
}
return pre;
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* node = head;
for(int i = 0;i < k;i++) {
if(node == NULL)
return head;
node = node -> next;
}
ListNode* res = reverse(head, node);
head -> next = reverseKGroup(node, k);
return res;
}
};