首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

leetcode - 交换链表节点

题意 给你链表节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点值后,返回链表节点链表 从 1 开始索引)。 示例 示例 1: ?...k = 1 输出:[1] 示例 4: 输入:head = [1,2], k = 1 输出:[2,1] 示例 5: 输入:head = [1,2,3], k = 2 输出:[1,2,3] 提示 链表节点数目是...是不是有点绕,倒是有个不成熟想法,也试着去提交了下,发现能过。...就是把所以 val 值取出来转数组, js ,单纯同类型数组,它在内存是连续,所以其访问复杂度是 O(1),所以我们把生成数组第(k - 1)个 和 数组长度减去 k 那位交换。...最后我们构造一个新链表返回,当然啦,后面笔者比较菜用了两次遍历去构造这个链表然后返回。

77320

两两交换链表节点

两两交换链表节点 给定一个链表,两两交换其中相邻节点,并返回交换链表。 你不能只是单纯改变节点内部值,而是需要实际进行节点交换。...curTmp; pre = curTmp; cur = curTmp.next; } return headNode.next; }; 思路 通过迭代方式实现两两交换链表节点...,直接遍历整个链表即可,首先定义一个空头结点,之后定义前置节点与当前正需要处理节点,当正在处理节点存在以及当前节点下一个节点都存在时进行循环,将当前节点与当前节点下一个节点进行缓存,之后将curNode...节点next赋值为nextNode节点next,即首先将该节点下一个节点指向nextNode下一个节点,之后将preNodenext赋值为nextNode,将nextNodenext赋值为curNode...,最后将preNode赋值为curNode,curNode赋值为curNodenext,注意此时curNode其实已经被交换换成了,是两个节点后一个节点,最后等待循环完成后返回头结点next即可

42800
您找到你想要的搜索结果了吗?
是的
没有找到

两两交换链表节点

problem 给定一个链表,两两交换其中相邻节点,并返回交换链表。 你不能只是单纯改变节点内部值,而是需要实际进行节点交换。...例如: 利用stack 我们利用一个 stack,然后不断迭代链表,每次取出两个节点放入 stack ,再从 stack 拿出两个节点。...借助 stack 后进先出特点,放进去时候是 1,2 。拿出来时候就是 2,1 两个节点了。 再把这两个节点串联起来,重复这个逻辑遍历完整个链表,就可以做到两两反转效果了。...= null) { //将两个节点放入stack stack.add(cur); stack.add(cur.next);...//当前节点往前走两步 cur = cur.next.next; //从stack中弹出两个节点,然后用p节点指向新弹出两个节点

27010

链表——24. 两两交换链表节点

1 题目描述 两两交换链表节点 给你一个链表,两两交换其中相邻节点,并返回交换链表节点。你必须在不修改节点内部情况下完成本题(即,只能进行节点交换)。...2 题目示例 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 3 题目提示 链表节点数目范围 [0, 100] 内...0 <= Node.val <= 100 4 思路 方法一:递归 可以通过递归方式实现两两交换链表节点。...如果链表至少有两个节点,则在两两交换链表节点之后,原始链表节点变成新链表第二个节点,原始链表第二个节点变成新链表节点链表其余节点两两交换可以递归地实现。...需要对每个节点进行更新指针操作。 空间复杂度:O(n)O(n),其中 nn 是链表节点数量。空间复杂度主要取决于递归调用栈空间。 方法二:迭代 可以通过迭代方式实现两两交换链表节点

40420

两两交换链表节点链表处理

给一个链表,两两交换其中节点,然后返回交换链表。 样例 给出 1->2->3->4, 你应该返回链表是 2->1->4->3。...你算法只能使用常数额外空间,并且不能只是单纯改变节点内部值,而是需要实际进行节点交换。...链表处理 链表插入要正确处理,还要处理奇数个节点和偶数个节点不同,细节都在注释里了,自己挑个小链表画一下,主要是一些边界条件弄对就行了。...另外,自己写链表时候喜欢用假节点,不爱动链表本身,假节点初始化时候一定要给一个值。c++不允许使用未初始化对象。...// write your code here } void Insert(ListNode *last,ListNode *l) //插入,last来记录最后一个节点位置

50530

LeetCode - #24 两两交换链表节点

LeetCode 算法到目前我们已经更新了 23 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。...如果大家有建议和意见欢迎文末留言,我们会尽力满足大家需求。 难度水平:中等 1. 描述 给你一个链表,两两交换其中相邻节点,并返回交换链表节点。...你必须在不修改节点内部情况下完成本题(即,只能进行节点交换)。 2....示例 1 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2 输入:head = [] 输出:[] 示例 3 输入:head = [1] 输出:[1] 约束条件: 链表节点数目范围...时间复杂度: O(n) 空间复杂度: O(1) 该算法题解仓库:LeetCode-Swift[2] 点击前往 LeetCode[3] 练习 特别感谢 Swift社区 编辑部每一位编辑,感谢大家辛苦付出

21010

删除链表节点

题目描述 难度级别:简单 请编写一个函数,使其可以删除某个链表给定(非末尾)节点。传入函数唯一参数为 要被删除节点 。...,那么调用了你函数之后,该链表应变为 4 -> 1 -> 9....示例 2: 输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 第三个节点,那么调用了你函数之后,该链表应变为 4 -> 5 -> 9....提示: 链表至少包含两个节点链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...解题思路 题目中待传递给当前函数实参node,它是链表某一个待删除节点,然后从链表删除这个节点

2.4K00

Swap Nodes in Pairs两两交换链表节点

题目大意 交换链表相邻两个元素。 注意第一个节点与第二个节点交换位置,而第二个节点不用与第三个节点交换位置。...注意点: 不允许修改节点值 只能用常量额外空间 解题思路 该题费脑,绕来绕去指向,这个解读比较清晰 来自: https://shenjie1993.gitbooks.io.../leetcode-python/024%20Swap%20Nodes%20in%20Pairs.html 比较常见链表操作。...下面看一下典型情况,如要交换链表A->B->C->DB和C需要做如下操作: 将A指向C 将B指向D 将C指向B 节点之前加一个假节点可以使所有的交换都符合上面的情况。...= node1 # C指向B temp = temp.next.next # 跳过两个 return dummy.next 总结

82230

LeetCode | 24.两两交换链表节点

这次来写一下 LeetCode 第 24 题,两两交换链表节点。 题目描述 题目直接从 LeetCode 上截图过来,题目如下: ?...上面的题就是 两两交换链表节点 题目的截图,同时 LeetCode 给出了一个函数定义,然后要求实现链表两两交换函数体。...最初链表头指向第一个节点,我们首先要交换是第一个节点和第二个节点,根据指针来看,只要让第一个节点 next 指向第三个节点,然后让第二个节点 next 指向第一个节点可以了。...这里又增加了一个新指针 result 来记录新节点,当循环完成以后,直接返回 result 就可以了。 上面的步骤就算完成了,几个问题其实都是写代码时候遇到。...觉得在内存消耗上应该可以更小一些,为了截这个图,重新提交了代码,提交代码前还修改了几行代码,内存消耗也由 5.5 MB 变为了 5.4 MB,通过梳理自己还是能找到改进空间,给自己点个赞。

43430
领券