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

两两交换链表中的节点

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

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

    两两交换链表中的节点

    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节点指向新弹出的两个节点

    28510

    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社区 编辑部的每一位编辑,感谢大家的辛苦付出

    23210

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

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

    84230

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

    这次来写一下 LeetCode 的第 24 题,两两交换链表中的节点。 题目描述 题目直接从 LeetCode 上截图过来,题目如下: ?...上面的题就是 两两交换链表中的节点 题目的截图,同时 LeetCode 给出了一个函数的定义,然后要求实现链表两两交换的函数体。...以上看似完成了,其实还是有一个问题,我们接着推第二步交换试试。如下图: ? 开始第二轮交换的时候,指针的位置是这样的,然后按照前面的指针交换的方式进行交换。...当以后两个节点交换完成后,将 pre 指针赋值给 tmp 指针即可。 这样看似完成了,那么还有问题么?...next->next; // 交换 pre->next = cur->next; cur->next = pre; // 这就是在第二次以及以后交换中要修正的部分

    45930

    LeetCode题目24:两两交换链表中的节点

    原题描述 + 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...示例 输入:1->2->3->4 输出:2->1->4->3 原题链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs 思路解析 + 这道题用到的指针数量比较多...关键点在于两个节点交换之后,一定要能够和后面未操作的部分再度连起来,这就需要记住四个位置。...第一个要交换的节点位置(靠前),用first指针指代; 第二个要交换的节点位置(靠后),用second指针指代; 处于second后部,未被操作的子链表头位置,用head指代; 处于first前部子链表尾部位置...然后,你才可以操作指针,形成prev->second->first->head的结构,如下图所示。 ? 为了便于操作,代码中还是要加一个哑结点。

    37620

    两两交换链表中的节点

    1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。...0 <= Node.val <= 100 4 思路 方法一:递归 可以通过递归的方式实现两两交换链表中的节点。...如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。...在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。...再令 temp = node1,对链表中的其余节点进行两两交换,直到全部节点都被两两交换。 两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next,返回新的链表的头节点即可。

    42520

    LeetCode-24 两两交换链表中的节点

    两两交换链表中的节点 > 难度:中等 > 分类:链表 > 解决方案:节点的交换 今天我们学习第24题两两交换链表中的节点,这是一道中等题。...题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...分析 这个题为基础的链表节点操作题,是将链表的节点两两进行交换,而且必须是交换节点而不能仅仅只改变链表的值。像这样的题,需要画一个图,来弄清楚指针的位置。...Github地址 LeetCode-24 两两交换链表中的节点:https://github.com/JacobLei/leetcode/blob/master/src/main/java/A24_SwapNodesinPairs.java...参考链接 两两交换链表中的节点:https://leetcode-cn.com/problems/swap-nodes-in-pairs/

    43220
    领券