【C++】22行递归代码
链表中的节点每k个一组翻转
http://www.nowcoder.com/questionTerminal/b49c3dc907814e9bbfa8437c251b028e
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(!head || k <= 1) return head; //空指针及不需要翻转的情况直接返回head
ListNode* pre = nullptr; //记录前一个ListNode
ListNode* cur = head; //记录当前ListNode
ListNode* next = nullptr; //记录后一个ListNode
for(int i = 0; i < k; i++) { //检测ListNode数量是否大于k
if(!cur) return head; //若不大于直接返回头
cur = cur->next; //指向下一个ListNode
}
cur = head; //检测完毕后cur复原成头
for(int i = 0; i < k; i++) {
next = cur->next; //记录后一个ListNode
cur->next = pre; //cur指向前一个ListNode
pre = cur; //pre右移
cur = next; //cur右移
}
head->next = reverseKGroup(next, k); //此时k个ListNode翻转完毕,尾(原来的头)指向递归后返回的头
return pre; //返回新的头
}
};
查看14道真题和解析