给出的链表中的节点每K个一组翻转返回翻转后的链表如果链表中的节点不是k的倍数将最后剩下的节点保持原样
算法1:
- 首先遍历链表,确定链表总长度n;
- 将链表分成若干段,每段长度为k,共分成n/k段;
- 对于每一段,采用头插法逆序重排;
- 将重排后的每一段连接起来,返回新链表的头节点。
时间复杂度:O(n),空间复杂度:O(1)
算法2:
- 使用递归的方式,每次处理链表的前k个节点;
- 对于前k个节点,采用头插法逆序重排;
- 递归处理剩余的节点,将处理后的子链表连接起来,返回新链表的头节点。
时间复杂度:O(n),空间复杂度:O(k)
两种算法的优缺点:
算法1的优点是空间复杂度比较低,只需要常数级别的额外空间,而且代码实现比较简单;缺点是需要遍历链表两遍,时间复杂度较高。
算法2的优点是时间复杂度比较低,只需要遍历链表一遍,而且代码实现比较简单;缺点是空间复杂度比较高,需要开辟k个额外空间。
原文地址: https://www.cveoy.top/t/topic/bn2I 著作权归作者所有。请勿转载和采集!