通过分析,这属于数据结构类型题目,但涉及到多次交换,也需要算法知识。

首先,我想的是,将链表中节点相互交换。

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题:两两交换链表中的节点的更多相关文章

  1. Java实现 LeetCode 24 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...

  2. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  3. 【LeetCode】24.两两交换链表中的节点

    24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...

  4. LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)

    题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能 ...

  5. NO.24两两交换链表中的节点

    NO.24两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例:给定 1->2->3-&g ...

  6. LeetCode-024-两两交换链表中的节点

    两两交换链表中的节点 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例说明请见LeetCode官网. 来源:力 ...

  7. lintcode-451-两两交换链表中的节点

    451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...

  8. 【Leetcode链表】两两交换链表中的节点(24)

    题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2- ...

  9. C#LeetCode刷题之#237-删除链表中的节点(Delete Node in a Linked List)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3832 访问. 请编写一个函数,使其可以删除某个链表中给定的(非末 ...

  10. Leetcode题库——24.两两交换链表中的节点

    @author: ZZQ @software: PyCharm @file: swapPairs.py @time: 2018/10/20 19:49 说明:给定一个链表,两两交换其中相邻的节点,并返 ...

随机推荐

  1. vue中在时间输入框中默认显示时间

    <template> <card> <label>开始时间</label> <DatePicker v-model="startTime ...

  2. IPO套路

    日前,温州市冠盛汽车零部件集团股份有限公司(以下简称:冠盛集团)在证监会官网更新了招股说明书,距离上会仅一步之遥.值得注意的是,这已经是公司第四次披露招股说明书,2018年6月,公司曾在IPO审核最严 ...

  3. UML-为什么要画领域模型?

    不熟悉业务的情况下, 1).找到关键概念和词汇 2).概念间的关系 熟悉业务的情况下, 1).梳理思路 完美不是目的. 另外,减少标示差异.如下图

  4. 2.Jenkins结合k8s完成Jenkins slave功能

    1.构建镜像 下载基础镜像,这里使用openvz的包,下载地址为:https://wiki.openvz.org/Download/template/precreated,下载centos7的镜像 下 ...

  5. 循环队列--忘记分配空间和如何用tag判断队空队满

    #include<iostream> #define maxsize 100 using namespace std; struct CLqueue { int *Q; int front ...

  6. object detection模型转换成TensorFlow Lite,在Android应用

    环境 tensorflow = 1.12.0 bazel = 0.18.1 ubuntu = 16.04 python = 3.6.2 安装 bazel (0.18.1) 如果tensorflow是1 ...

  7. python机器学习(1:K_means聚类算法)

    一.算法介绍 K-means算法是最简单的也是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的.算法的目的是使各个样本与所在均值的误差平方和达到最小(这也是评价K-means算 ...

  8. C++对象的动态建立与释放

    new运算符动态分配堆内存  (从堆分配一块“类型”大小的存储空间,并且返回首地址) 1.写程序的时候,经常需要动态的分配和撤销内存空间,C语言中常常是利用库函数 malloc 和 free 来分配和 ...

  9. Spring AOP中使用args表达式访问目标方法的参数

    Spring AOP 的使用过程理解 首先,aop的使用场景介绍: 1.处理一些通用的非功能性的需求,不影响业务流程,比如说打印日志.性能统计.推送消息等: 2.aop无法拦截static.final ...

  10. 测试mvn -v 时报错,原因

    当安装完maven后在cmd命令框通过mvn -v 可以判断maven环境变量是否安装成功,但我安装配置完环境变量后执行报错如图 原因:配置的jdk的环境变量不符合maven最低要求(我配置的是jdk ...