翻转一个链表

样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点。

那样例来说,步骤是这样的:

1. 新建空节点:None

2. 1->None

3. 2->1->None

4. 3->2->1->None

代码就非常简单了:

"""

Definition of ListNode

class ListNode(object):

def __init__(self, val, next=None):

self.val = val

self.next = next

"""

class Solution:

"""

@param head: The first node of the linked list.

@return: You should return the head of the reversed linked list.

Reverse it in-place.

"""

def reverse(self, head):

temp = None

while head:

cur = head.next

head.next = temp

temp = head

head = cur

return temp

# write your code here

当然,还有一种稍微难度大一点的解法。我们可以对链表中节点依次摘链和链接的方法写出原地翻转的代码:

"""

Definition of ListNode

class ListNode(object):

def __init__(self, val, next=None):

self.val = val

self.next = next

"""

class Solution:

"""

@param head: The first node of the linked list.

@return: You should return the head of the reversed linked list.

Reverse it in-place.

"""

def reverse(self, head):

if head is None:

return head

dummy = ListNode(-1)

dummy.next = head

pre, cur = head, head.next

while cur:

temp = cur

# 把摘链的地方连起来

pre.next = cur.next

cur = pre.next

temp.next = dummy.next

dummy.next = temp

return dummy.next

# write your code here

需要注意的是,做摘链的时候,不要忘了把摘除的地方再连起来

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多Python数据结构之翻转链表相关文章请关注PHP中文网!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python数据结构之链表_Python数据结构之翻转链表相关推荐

  1. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

  2. python链表_python数据结构之链表(一)

    2020-07-09更新 细细琢磨了一下以前的这篇文章,感觉这样不太能体现链表的精髓,要想真的想深入研究链表这种数据结构,在没有指针的语言中,还是应该用静态链表来模拟真正链表比较好. 对于静态链表,个 ...

  3. python数据结构的列表_Python数据结构之列表

    一,数据结构的概念 数据结构是通过某种方式组织在一起的数据集合,这些数据元素可以是数字或者字符,甚至可以是其他的数据结构. Python中最基本的数据结构是序列(sequence).序列中的每个元素被 ...

  4. python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

    一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...

  5. python的线性链表_Python线性表——单链表-阿里云开发者社区

    Python线性表--单链表 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继, ...

  6. python创建一个有序链表_Python实现单向有序链表(Singly linked list)

    概念介绍 上一博文已经介绍了Python实现单向无序链表的实现方式,这篇博文来介绍Python如何实现单向有序链表.有序和无序仅仅指节点所包含的数据成员的大小排列顺序,有序指各个节点按照节点数据成员的 ...

  7. 【LeetCode笔记】剑指 Offer 06. 从尾到头打印链表(Java、翻转链表)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 思路 & 代码 一次遍历:翻转链表 + 记录长度 二次遍历:遍历翻转后的链表,更新数组 O(n) & O(1) /*** D ...

  8. python递归编程题_Python数据结构与算法41:递归编程练习题4:铺瓷砖

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为8分钟. 递归编程练习题4:铺瓷砖 给定一个长度为N的区域,及4种不同长度的瓷砖:灰瓷砖(长为1格).红瓷 ...

  9. python数据结构递归树_python数据结构(对称二叉树递归和迭代)

    1.题目描述 给定一个二叉树,检查它是否是镜像对称的. 2.代码详解 2.1 递归写法 # Definition for a binary tree node. class TreeNode(obje ...

最新文章

  1. 资源已存在时POST的HTTP响应代码
  2. OpenJDK 14 性能保持提升,但 OpenJDK 8 仍是最强王者
  3. 【干货】产品经理处理工作中突发事件的新技能Get!
  4. Mysql查看和修改时区
  5. go语言int类型转化成string类型的方式
  6. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(BERT)
  7. LeetCode 887. 鸡蛋掉落(DP,难、不懂)
  8. post发送byte数组_KAFKA消息发送
  9. Java LinkedList addFirst()方法与示例
  10. CSS 制作垂直导航
  11. 华为再发行30亿元超短期融资券
  12. HDU1106 排序(解法二)(废除!!!)
  13. Jupyter notebook最简原型界面设计 - ipywidgets与lineup_widget
  14. 一个关于Show窗口与Invalidate();顺序问题
  15. SQL 查询CET使用领悟
  16. 【图像去噪】基于matlab GUI均值+中值+高斯低通+多种小波变换图像去噪【含Matlab源码 856期】
  17. 用c语言编写函数流程,C语言课程设计————写下流程图! 谢谢
  18. mysql面试必会6题经典_经典sql面试题及答案第7期
  19. Python安装pandas模块
  20. mysql存储过程转义字符_mysql存储过程转义字符

热门文章

  1. centos7 关闭防火墙和selinux
  2. Linux网络协议栈(一)——Socket入门(1)
  3. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
  4. string类的写时拷贝
  5. grunt集成自动启动
  6. http代理的脚本http_proxy.py
  7. 网管分析数据包? 组合一下吧。
  8. Oracle SQL Loader的详细语法
  9. 美国虚拟主机大打安全牌争抢国内高端外贸主机市场
  10. 如果你是程序员 别说你没有用过这五大编程工具