【leetcode100-031】【链表】k个一组翻转链表
2024-01-08 20:41:26
【题干】
给你链表的头节点?head
?,每?k
?个节点一组进行翻转,请你返回修改后的链表。
k
?是一个正整数,它的值小于或等于链表的长度。如果节点总数不是?k
?的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
【思路】
- 非递归折腾一早上了都超时,写个递归版吧
- 拿到一条链表,我们可以将其分为已处理部分,正在处理部分,待处理部分;
- 我们每次从待处理部分取出一组k个节点(若还够取),更新待处理部分的起始位置(下一层递归的传入参数),进行处理,并把处理完的结果接到已处理部分的尾部(递归主体),直到待处理部分已不足k个(递归出口);
- 本题有大量细节需要处理,每一个指针变动都要小心丢链~
【题解】
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if (head == NULL) return NULL;
ListNode *a = head;
ListNode *b = head;
for (int i = 0; i < k; i++) {
if (b == NULL) return head;
b = b->next;
}
ListNode *newNode = reverseOperator(a,b);
a->next = reverseKGroup(b,k);
return newNode;
}
ListNode* reverseOperator(ListNode* n,ListNode *b) {
ListNode *pre, *cur, *nxt;
pre = NULL; cur = n; nxt = n;
while (cur != b) {
nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
};
文章来源:https://blog.csdn.net/weixin_63059689/article/details/135414023
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!