题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
链表相关的算法思路,由于没有索引,通常采用递归、迭代两种方式,在翻转上的思考来讲,还是以迭代结合分段的思路更为清晰,并且内存消耗更小
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
ListNode* tail = head;
for(int i=0;i<k;i++){
//链表长度不足k,直接return
if(tail == nullptr){
return head;
}
tail = tail->next;
}
//翻转时需要的前序和当前节点
ListNode* pre=nullptr, *cur = head , *curNext = cur->next;
while(cur!=tail){
//改变当前节点指向,由向后改为向前
cur->next = pre;
//向后迭代
pre = cur;
cur = curNext;
curNext = cur->next;
}
//当前尾指向下一段要翻转的链表
head->next = reverseKGroup(tail,k);
return pre;
}
};