题意 给你链表的头节点 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 的那位交换。...最后我们构造一个新的链表返回,当然啦,后面笔者比较菜用了两次遍历去构造这个链表然后返回。
两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...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即可
题意 给一个链表,两两交换其中的节点,然后返回交换后的链表。 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。...思路 本题只要循环判断后两个节点不为空的情况下,将后面这两个元素进行交换即可,最重要的是,交换的时候,要记得保留原数据,以便拼接起来链表,谨防数据丢失。...head = n1; } return dummy.next; } } 原题地址 LintCode:两两交换链表中的节点
递归解法 大佬解释递归 class Solution { public: ListNode* swapPairs(ListNode* head) { //在递归到最后两个节点的时候...->next == NULL) { return head; } //函数返回的是要交换两个节点的后面一个节点,相当于将交换后的两个节点在放入原链表中...ListNode* newlist = swapPairs(head->next->next); //下面是进行两个节点交换的代码 ListNode*...) ListNode* temp = dummyNode;//用来遍历链表 while (temp->next !...= NULL)//当还剩一个或没有节点的时候,停止交换 { //每一次将temp后面两个节点进行交换操作 ListNode* node1
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节点指向新弹出的两个节点
,两两交换其中相邻的节点,并返回交换后的链表。...你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3....,能用递归,绝不用循环...所以这里简单说下我的递归版本的思路: 判断当前head节点是否为null或者head.next是不是为null,如果是null,那么就不用翻转了,直接返回head就好了 获取到...head.next节点,然后将当前head节点的next指向head.next.next节点的翻转结果。...最后将next.next指向head,即实现当前两个节点的翻转(此时head.next已经是翻转好的剩余链表了) 简单粗暴.... 我在一开始还想了各种pre, next的定义。
链表节点删除,只有标记待删除节点的前驱节点即可; [注]:如果不是带有节点设置一个虚拟节点即可,返回时返回dummy->next。...head; node *p = pre->next; //工作指针 while (p) { if (minx val && p->val < maxx) { //满足条件,p为待删除节点
1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。...2 题目示例 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 3 题目提示 链表中节点的数目在范围 [0, 100] 内...0 <= Node.val <= 100 4 思路 方法一:递归 可以通过递归的方式实现两两交换链表中的节点。...如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。...需要对每个节点进行更新指针的操作。 空间复杂度:O(n)O(n),其中 nn 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。 方法二:迭代 可以通过迭代的方式实现两两交换链表中的节点。
给一个链表,两两交换其中的节点,然后返回交换后的链表。 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。...你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...链表处理 链表的插入要正确处理,还要处理奇数个节点和偶数个节点的不同,细节都在注释里了,自己挑个小的链表画一下,主要是一些边界条件弄对就行了。...另外,我自己写链表的时候喜欢用假节点,不爱动链表本身,假节点初始化的时候一定要给一个值。c++不允许使用未初始化的对象。...// write your code here } void Insert(ListNode *last,ListNode *l) //插入,last来记录最后一个节点的位置
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社区 编辑部的每一位编辑,感谢大家的辛苦付出
题目描述 难度级别:简单 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。...,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9....示例 2: 输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9....提示: 链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 不要从你的函数中返回任何结果。...解题思路 题目中待传递给当前函数的实参node,它是链表中的某一个待删除的节点,然后从链表中删除这个节点。
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的额外空间。...你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 解:递归,有难度 /** * Definition for singly-linked list.
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...思路 设置一个dummy 节点简化操作,dummy next 指向head。...初始化first为第一个节点 初始化second为第二个节点 初始化current为dummy first.next = second.next second.next = first current.next...= second current 移动两格 重复 关键点解析 链表这种数据结构的特点和使用 dummyHead简化操作 代码 /* * @lc app=leetcode id=24 lang
题目 给你链表的头节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。 ?...= 1 输出:[1] 示例 4: 输入:head = [1,2], k = 1 输出:[2,1] 示例 5: 输入:head = [1,2,3], k = 2 输出:[1,2,3] 提示: 链表中节点的数目是...} b = prev; swap(a->val, b->val); return head; } }; 1108 ms 176.3 MB C+
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。...如果还不懂 画图就懂了 class Solution { public ListNode swapPairs(ListNode head) { /** 递归做法 可以记住他的解法
ListNode* l = new ListNode(0); input(l); Solution s; s.deleteNode(l->next->next);//输入1 2 3 ,链表中存储...3 2 1 ,递归逆序输出:1 2 3 ,删除2 cout << "链表打印:" << endl; display(l->next); cout << endl; } int main
题目大意 交换链表中相邻的两个元素。 注意第一个节点与第二个节点要交换位置,而第二个节点不用与第三个节点交换位置。...注意点: 不允许修改节点的值 只能用常量的额外空间 解题思路 该题费脑,绕来绕去的指向,这个解读比较清晰 来自: https://shenjie1993.gitbooks.io.../leetcode-python/024%20Swap%20Nodes%20in%20Pairs.html 比较常见的链表操作。...下面看一下典型情况,如要交换链表中A->B->C->D中的B和C需要做如下操作: 将A指向C 将B指向D 将C指向B 在头节点之前加一个假节点就可以使所有的交换都符合上面的情况。...= node1 # C指向B temp = temp.next.next # 跳过两个 return dummy.next 总结
两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
两两交换链表中的节点) https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。...你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 ...输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围...[0, 100] 内 0 <= Node.val <= 100 进阶:你能在不修改链表节点值的情况下解决这个问题吗?...(也就是说,仅修改节点本身。)
这次来写一下 LeetCode 的第 24 题,两两交换链表中的节点。 题目描述 题目直接从 LeetCode 上截图过来,题目如下: ?...上面的题就是 两两交换链表中的节点 题目的截图,同时 LeetCode 给出了一个函数的定义,然后要求实现链表两两交换的函数体。...最初链表的头指向第一个节点,我们首先要交换的是第一个节点和第二个节点,根据指针来看,只要让第一个节点的 next 指向第三个节点,然后让第二个节点的 next 指向第一个节点就可以了。...我这里又增加了一个新的指针 result 来记录新的头节点,当循环完成以后,直接返回 result 就可以了。 上面的步骤就算完成了,几个问题其实都是我在写代码的时候遇到的。...我觉得在内存消耗上应该可以更小一些,我为了截这个图,重新提交了代码,在提交代码前还修改了几行代码,内存消耗也由 5.5 MB 变为了 5.4 MB,通过梳理自己还是能找到改进空间,给自己点个赞。
领取专属 10元无门槛券
手把手带您无忧上云