当前位置:网站首页>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;
}
};
边栏推荐
- 艺术与科技的狂欢,阿那亚2022砂之盒沉浸艺术季
- 元宇宙社交应用,靠什么吸引用户「为爱发电」?
- ThreadLocal全面解析(一)
- 3598. 二叉树遍历(华中科技大学考研机试题)
- 智能方案设计——智能跳绳方案
- 测试4年感觉和1、2年时没什么不同?这和应届生有什么区别?
- labelme - block drag and drop events
- Using SylixOS virtual serial port, serial port free implementation system
- Exploration and practice of the "zero trust" protection and data security governance system of the ransomware virus of Meichuang Technology
- shell (text printing tool awk)
猜你喜欢
随机推荐
黑猫带你学Makefile第11篇:当头文件a.h改变时,如何将所有依赖头文件a.h的.c文件都重新编译
今日睡眠质量记录75分
ThreadLocal全面解析(一)
使用 Cloudreve 搭建私有云盘
如何保护 LDAP 目录服务中的用户安全?
Alibaba and Ant Group launched OceanBase 4.0, a distributed database, with single-machine deployment performance exceeding MySQL
uni-app微信小程序——下拉多选框
谁是边缘计算服务的采购者?是这六个关键角色
阿里云贾朝辉:云XR平台支持彼真科技呈现国风科幻虚拟演唱会
shell编程之免交互
shell programming without interaction
TCP连接过程中如果拔掉网线会发生什么?
labelme-屏蔽拖拽的事件
力扣215题,数组中的第K个最大元素
Huawei router clock near the drainage experiment (using stream strategy)
MySQL Advanced Commands
Use Cloudreve to build a private cloud disk
财务年报怎样翻译,为什么要选择专业翻译公司?
labelme-5.0.1版本编辑多边形闪退
【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示