当前位置:网站首页>Nodes in the linked list are flipped in groups of k
Nodes in the linked list are flipped in groups of k
2022-08-10 22:30:00 【dry rice white】
描述
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身.
数据范围: \ 0 \le n \le 2000 0≤n≤2000 , 1 \le k \le 20001≤k≤2000 ,链表中每个元素都满足 0 \le val \le 10000≤val≤1000
要求空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
例如:
给定的链表是 1\to2\to3\to4\to51→2→3→4→5
对于 k = 2k=2 , 你应该返回 2\to 1\to 4\to 3\to 52→1→4→3→5
对于 k = 3k=3 , 你应该返回 3\to2 \to1 \to 4\to 53→2→1→4→5
This topic has beenAC

解题思路:
拿到这题,One idea is to use the stack to write.As for why I thought of using a stack?Because it needs to be reversed,Here I see the requirements of the title,空间复杂度为 O(1).The first idea is to save the value,通过 newA new node has been implemented.但是仔细一想,It seems impossible,Because the space complexity is definitely not in line with this,突然灵机一动,We can use the stack to store nodes that are pointers,nice.
1→2→3→4→5 k = 2时
1→2→3→4→5 k = 3时
4和5It doesn't need to be flipped,So if you use a stack, it will bring another problem,Because the stack structure is first in last out,If you use the stack to save it will definitely lead to,4,5will also be flipped.
这里有两个解决方法,
1.把4,5再次入栈(入另一个栈),然后再输出 ok
2.Might as well not use the stack structure,We use a two-way queue(Moreover, the efficiency of inserting and deleting at the front and rear ends of the two-way queue is also quite high,So we use this structure best)
Let's look at an example:
1→2→3→4→5 k = 3时
准备工作,A pointer to this linked list head.一个deque,一个中间变量 tmpk
Some handy auxiliary pointers s和ans




Here we make a loop,while(head != nullptr) 是的,It can be done in one pass


此时退出循环,okk
判断 que是否为空或者tmpk是否等于 0
如果que不为空的话,说明queAt this time, the node does not need to be flipped
所以

那么这题就ok了,Of course the topic has some details,This can only be modified according to the actual test emptying
比如 {},2 {1,2},3 {1},2等
Attached the code I passed:
class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
deque<ListNode*> sta;
int tmpk = k;
ListNode *s = nullptr;
ListNode *ans = nullptr;
while(head != nullptr)
{
sta.push_back(head);
head = head->next;
tmpk--;
if(tmpk == 0)
{
if(s == nullptr)
{
s = sta.back();
sta.pop_back();
ans = s;
}
while(!sta.empty())
{
s->next = sta.back();
sta.pop_back();
s = s->next;
}
tmpk = k;
}
}
while(!sta.empty())
{
if(s == nullptr)
{
s = sta.front();
sta.pop_front();
ans = s;
}
else
{
s->next = sta.front();
sta.pop_front();
s= s->next;
}
}
if(s != nullptr)
s->next = nullptr;
return ans;
}
};
边栏推荐
- 企业云存储日常运行维护实践经验分享
- The Thread State,
- How to translate financial annual report, why choose a professional translation company?
- 黑猫带你学Makefile第12篇:常见Makefile问题汇总
- Shell编程规范与变量
- Service - DNS forward and reverse domain name resolution service
- How to secure users in LDAP directory service?
- BM7 链表中环的入口结点
- Regular expression of shell programming and text processor
- Shell编程之条件语句(二)
猜你喜欢
随机推荐
uni-app微信小程序——下拉多选框
shell(文本打印工具awk)
阿里巴巴、蚂蚁集团推出分布式数据库 OceanBase 4.0,单机部署性能超 MySQL
C#【必备技能篇】Hex文件转bin文件的代码实现
port forwarding
LeetCode每日两题01:反转字符串 (均1200道)方法:双指针
《DevOps围炉夜话》- Pilot - CNCF开源DevOps项目DevStream简介 - feat. PMC成员胡涛
Self-organization is a two-way journey between managers and members
2022.8.9 Mock Competition
MySQL高级指令
12 Recurrent Neural Network RNN2 of Deep Learning
Use Cloudreve to build a private cloud disk
HighTec shortcut keys (Keys) setting location
【640. 求解方程】
解码2022中国网安强星丨正向建、反向查,华为构建数字化时代的网络安全防线
Translating scientific and technological papers, how to translate from Russian to Chinese
接口测试的概念、目的、流程、测试方法有哪些?
[SQL brush questions] Day3----Special exercises for common functions that SQL must know
2022年8月的10篇论文推荐
元宇宙社交应用,靠什么吸引用户「为爱发电」?








