点赞 1

相关推荐

核心思路是先统计链表总长度,确定需要反转的组数,再逐组局部反转并重新连接,计算出需要反转的组数s = n/k;然后循环s次,每次对当前 k 个节点进行局部反转,反转后将当前组的首尾与前后部分重新连接,最后返回处理后的链表头。对应的代码解析如下:class Solution {public:ListNode* reverseKGroup(ListNode* head, int k) {if(!head || k == 1) return head; // 空链表或k=1无需反转ListNode* dummy = new ListNode(0); // 虚拟头节点,简化头节点处理dummy->next = head;ListNode* cur = head;ListNode* pre = dummy; // 记录上一组的尾节点ListNode* next = nullptr;ListNode* prev = nullptr;ListNode* temp = nullptr; // 记录当前组反转前的头节点int n = 0;while(cur != nullptr) {n++;cur = cur->next;}cur = head;if(n == 1) return head; // 只有1个节点直接返回int s = n / k; // 计算需要反转的组数while(s--) {for(int i = 0; i < k; i++) {if(i == 0) temp = cur; // 记录当前组反转前的头节点next = cur->next;cur->next = prev; // 当前节点指向前一个反转节点prev = cur;cur = next;}pre->next = prev;temp->next = cur;pre = temp; // 更新上一组的尾节点为当前组反转前的头节点prev = nullptr; // 重置反转前驱指针}ListNode* newhead = dummy->next;delete dummy; // 释放虚拟头节点,避免内存泄漏return newhead;}};该解法的时间复杂度为 O (n),空间复杂度为 O (1)。
点赞 评论 收藏
分享
这一次面试真的很感慨,能走到三面已经是我意料之外了。非常感谢我遇到的各位面试官,很和蔼,我不会的问题引导着我去思考,我也深刻地认识到我对于各个组件的底层原理理解的薄弱。一面:拷打了一些八股,对于我简历上的项目问了更深的一个层次,我勉勉强强回答上来,在问的过程中问到了一些偏底层的东西,比如说:C++在分配内存,操作系统,CPU等都做了些什么工作,为什么能够分配内存等。手撕了一道算法题,秒了。二面:被匹配到了基础平台研发部门,不得不承认这个部门的面试很难,开局手撕了两道算法题,秒了。然后没有问任何项目相关的问题,问了很多基础的知识,又一次问到了C++智能指针相关,C++虚拟内存分配等,malloc分配内存的全过程(如前128K使用了哪些系统调用,后面使用了哪些系统调用,这些调用做出了哪些优化等);TCP相关的一些知识;僵尸进程等相关知识点。答得磕磕绊绊,面完半个月没有信息,以为挂了,结果走到了三面。三面:面试官是一个很和蔼的大叔。当时的面试状态也非常糟糕,面的一塌糊涂,把面试官都面笑了,不知道该问我什么了。先是根据之前的面评,问了更底层的智能指针(共享指针部分)让我手写一个共享指针(非模板库)。我对于这些知识很多仅限于理论,平常都是写一些算法,项目上只是会用即可,有时候用法也记不清需要现查,确实很少用过这些。我凭借着印象大概描述了一下,存在优化上的问题。后面谈到了交叉引用,面试官让我用模板库里的实现一个交叉引用的案例,实话实说,想不起来。后面面试官又挑了redis问了关于快照与日志相关的问题,问到了快照在内存上是如何操作的,在保存为快照的过程中依旧会有缓存的更新,redis与操作系统都做了哪些工作等。不会,我凭理解与印象回答了一部分,答得不对。等等等等,一大堆抽象的事情。手撕代码并不是算法题,没有写过这种题,不会,真的想不出来。大致意思是有一个链表,你不能将其放到内存中,你有一个函数getnext可以取下一个数据,你不知道有多少个数据,你有一个函数next可以判断是否还有下一个。现在你需要随机的等概率的取出K个节点(每一个节点被选择的概率均为一样的),我的思路被驳回了,链表只能扫描一遍,不能重复扫描,各个节点之间被选择必须是独立的,选择节点必须是等概率的。最后没写出来。挂了。很难受很惋惜也很感慨。也怨不得别人,菜了就是菜了,挨打就立正。下去接着下功夫吧,只能看客户端能不能把我捞起来,或者春招再战。不过拼多多的工作强度确实很大啊,哈哈,一面的面试官一脸的憔悴,黑眼圈特别大。
查看11道真题和解析
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务