首页
学习
活动
专区
工具
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] 提示 链表节点数目是...个节点,第 k 个节点 next 节点指向倒数第 k 个节点 next 节点。...就是我把所以 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 题目描述 两两交换链表节点 给你一个链表,两两交换其中相邻节点,并返回交换链表节点。你必须在不修改节点内部情况下完成本题(即,只能进行节点交换)。...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

链表问题】删除链表第K个节点

前言 以专题形式更新刷题贴,欢迎跟我一起学习刷题。每道题会提供简单解答。 【题目描述】 在链表删除倒数第 K 个节点。...【要求】 如果链表长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1) 【难度】 士 【解答】 删除时候会出现三种情况: 1、不存在倒数第 K 个节点,此时不用删除。...2、倒数第 K 个节点就是第一个节点。 3、倒数第 K 个节点在第一个节点之后。 所以我们可以用一个变量 num 记录链表一共有多少个节点。 如果 num < K,则属于第一种情况。...如果 num == K,则属于第二情况。 如果 num > K, 则属于第三种情况,此时删除倒数第 K 个节点等价于删除第 (num - k + 1) 个节点。...//定位到这个点前驱 while (num - K !

1.7K10

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

微博:@故胤道长[1]) Swift 算法题题解整理为文字版以方便大家学习与阅读。...如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家需求。 难度水平:中等 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

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 在头节点之前加一个假节点就可以使所有的交换都符合上面的情况。...= node2.next # B指向D node2.next = node1 # C指向B temp = temp.next.next # 跳过两个

82230
领券