leetcode第24题:两两交换链表中的节点

通过分析,这属于数据结构类型题目,但涉及到多次交换,也需要算法知识。
首先,我想的是,将链表中节点相互交换。
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if not head or not head.next: return head
while head.next:
temp = head.next
head = temp.next
temp.next = head
return head
显然这是错误的,因为head发生变化后,头指针找不到了,无法返回链表。这条路行不通。
此时,可以使用递归法:因为递归本质就是不断重复相同的事情。
其中我们应该关心的主要有三点:
1.返回值
2.调用单元做了什么
3.终止条件
在本题中:
1.返回值:交换完成的子链表
2.调用单元:设需要交换的两个点为 head 和 next,head 连接后面交换完成的子链表,next 连接 head,完成交换
3.终止条件:head 为空指针或者 next 为空指针,也就是当前无节点或者只有一个节点,无法进行交换
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if not head or not head.next: return head
res = head.next
head.next = swapPairs(res.next)
res.next = res
return res
递归分步说明:(假定链表为 1->2->3->4->5->6)
第0轮:
head =1
res = 2->...
res.next = 3->...
进入第1轮:
head = 3
res = 4->..
res.next = 5->6
进入第2轮:
head = 5
res =6
res.next = null
进入第3轮:返回null
回到第二轮:
head.next =null
res.next = head(5)
return res ( 6->5)
回到第一轮:
head.next = 6
res.next = head(3)
return res (4->3->6->5)
回到第0轮:
head.next = 4
res.next =1
return res(2->1->4->3->6->5)
leetcode第24题:两两交换链表中的节点的更多相关文章
- Java实现 LeetCode 24 两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
- leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- 【LeetCode】24.两两交换链表中的节点
24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...
- LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能 ...
- NO.24两两交换链表中的节点
NO.24两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例:给定 1->2->3-&g ...
- LeetCode-024-两两交换链表中的节点
两两交换链表中的节点 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例说明请见LeetCode官网. 来源:力 ...
- lintcode-451-两两交换链表中的节点
451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...
- 【Leetcode链表】两两交换链表中的节点(24)
题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2- ...
- C#LeetCode刷题之#237-删除链表中的节点(Delete Node in a Linked List)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3832 访问. 请编写一个函数,使其可以删除某个链表中给定的(非末 ...
- Leetcode题库——24.两两交换链表中的节点
@author: ZZQ @software: PyCharm @file: swapPairs.py @time: 2018/10/20 19:49 说明:给定一个链表,两两交换其中相邻的节点,并返 ...
随机推荐
- 吴裕雄--天生自然ShellX学习笔记:Shell 流程控制
和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { search(q); ...
- 查看jks文件中的签名
1. 打开CMD命令行进入本机安装的jdk或jre下的bin目录. 2. 下来看图 keytool -list -v -keystore C:\Users\Administrator\Desktop\ ...
- vuex的优缺点
vuex的优点 1.解决了非父子组件的消息传递(将数据存放在state中) 2.减少了AJAX请求次数,有些情景可以直接从内存中的state获取 vuex的缺点 1.刷新浏览器,vuex中的state ...
- G. Minimum Possible LCM
https://codeforces.com/contest/1154/problem/G #include<bits/stdc++.h> using namespace std; typ ...
- oracle 导入导出参数
- 指定linux 下默认python版本
sudo rm -rf python sudo ln -s /usr/bin/python3 /usr/bin/python
- Linux 进程信号量
#include<stdlib.h> #include<stdio.h> #include<sys/types.h> #include<sys/ipc.h&g ...
- eclipse优化自动补全(解决空格、分号等上屏问题)
第一步:打开"Window"——>"Show View"——>"Other"——>找到"Plug-in Deve ...
- 解决 Win7 远程桌面 已停止工作的问题
Windows 7远程桌面登录时崩溃, 错误提示如下: 问题签名: 问题事件名称: APPCRASH 应用程序名: mstsc.exe 应用程序版本: 6.1.7601.18540 应用程序时间戳: ...
- 大言不惭 swank? talk about sth or speak too confidently
cán,意思是指说大话而毫不感到难为情.出自<论语·宪问>:“子曰:‘其言之不怍,则为之也难.’”宋·朱熹注:“大言不惭,则无必为之志,而不自度其能否也.欲践其言,其不难哉!” 是不是类似 ...