Python数据结构之翻转链表

yipeiwu_com7年前Python基础

翻转一个链表

样例:给出一个链表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 opencv实现图像边缘检测

python opencv实现图像边缘检测

本文利用python opencv进行图像的边缘检测,一般要经过如下几个步骤: 1、去噪 如cv2.GaussianBlur()等函数; 2、计算图像梯度 图像梯度表达的是各个像素点之间...

python global关键字的用法详解

最近刚好有朋友遇到个global相关的问题,这里简单学习一下global关键字的用法。 想要更好的了解global关键字,首先要熟悉python的全局变量与局部变量的概念。global关...

在Python的框架中为MySQL实现restful接口的教程

在Python的框架中为MySQL实现restful接口的教程

最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下:     请求收拢到DBGate,可以使DBGate变...

Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解

Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解

virtualenv是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。创建的环境是独立的,互不干扰,...

python3实现钉钉消息推送的方法示例

背景 偶然发现一个python实现的按照农历/阴历推送消息提醒的程序,钉钉群消息推送。此处总结并对其可推送的消息做。 DingtalkNotice 环境:python3.7 安装:...