接昨天文章详解Python变量作用域最后的思考题。

class Node:

'''节点结构'''

def __init__(self, data, leftNode=None, rightNode=None):

#设置当前节点的值和指向下一个节点的指针

self.data = data

self.left = leftNode

self.right = rightNode

def insertAfter(self, node):

if node.data == 'HEAD':

print('You cannot make another head node.')

return

#在当前节点后面插入新节点

node.right = self.right

if self.right != None:

self.right.left = node

node.left = self

self.right = node

def insertBefore(self, node):

if self.data == 'HEAD':

print('You cannot insert node before the head node.')

return

if node.data == 'HEAD':

print('You cannot make another head node.')

return

#在当前节点前面插入新节点

node.left = self.left

if self.left != None:

self.left.right = node

node.right = self

self.left = node

def deleteAfter(self):

#删除当前节点之后的节点

if self.right == None:

print('Nothing to delete')

return

p = self.right

if p.right != None:

p.right.left = self

self.right = p.right

#删除节点,释放空间

del p

def deleteBefore(self):

#删除当前节点之前的节点

p = self.left

if p.data == 'HEAD':

print('Nothing to delete.')

return

self.left = p.left

p.left.right = self

#删除节点,释放空间

del p

下面是测试代码:

#头节点

head = Node('HEAD')

p = head

for i in range(1, 10):

#依次生成9个数字,并创建相应的节点

#把节点连接到链表的尾部

n = Node(i)

p.insertAfter(n)

p = n

p = head

#遍历链表节点,插入新节点,删除前后节点

while p:

if p.data == 3:

p.deleteAfter()

p.deleteBefore()

p.insertBefore(Node(2.5))

p.insertAfter(Node(3.5))

break

else:

p = p.right

#正向遍历链表并输出每个节点的值

p = head

while p:

print(p.data, end='-->')

tail = p

p = p.right

print('None')

#反向遍历链表并输出每个节点的值

p = tail

while p.data != 'HEAD':

print(p.data, end='-->')

p = p.left

print('HEAD')

运行结果如下:

HEAD-->1-->2.5-->3-->3.5-->5-->6-->7-->8-->9-->None

9-->8-->7-->6-->5-->3.5-->3-->2.5-->1-->HEAD

Python版双链表结构与有关操作相关推荐

  1. 浅谈:数据结构之双链表结构与代码模拟双链表的实现

    双链表 本文是观看尚硅谷韩老师数据结构与算法根据老师讲解自己做的笔记,部分信息收集网络 与单链表区别 逻辑上没有区别.他们均是完成线性表的内容.主要的区别是结构上的构造有所区别. 对于单链表: 对于一 ...

  2. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  3. 数据结构与算法详细解析之双链表结构解析

    一.双向链表结构分析及其特点: 双链表结构:双向链表中每一个Node节点含Data域及pre指针(指向上一个节点).Next指针(指向下一个节点): 特点: 1)双向链表可以双向查找(向前或者向后查找 ...

  4. 数据结构与算法(Python版) | (6) 线性结构---队列、双端队列和列表

    本专栏主要基于北大的数据结构与算法教程(Python版)进行整理,包括课程笔记和OJ作业. 课程链接 1. 队列抽象数据类型及Python实现 什么是队列? 队列是一种有次序的数据集合,其特征是: 1 ...

  5. 双链表(删除节点操作)

    在双链表中删除第i个节点算法如下: 首先要会: 双链表的存储结构定义: typedef struct DLinkList{int data;DLinkList * prior;DLinkList * ...

  6. 双链表(插入节点操作)

    在双链表L中第i个位置插入值域为e的结点. 双链表的存储结构定义: typedef struct DLinkList{int data;DLinkList * prior;DLinkList * ne ...

  7. 双链表插入、删除操作单步解析(十四)

    1.双链表定义 单链表只能向后操作,不能向前操作.双链表可以向前和向后操作. 双链表特点:以下图解释 一个前驱指针:ai的前驱指针,指向ai-1结点,即存放ai-1的地址. 数据域:存放数据 一个后驱 ...

  8. 数据结构--双链表的创建和操作

    http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一. ...

  9. (王道408考研数据结构)第二章线性表-第三节2:双链表的定义及其操作(插入和删除)

    文章目录 一:双链表的定义 二:双链表代码描述 三:双链表的初始化 四:双链表的插入 五:双链表的删除 一:双链表的定义 双链表:双链表在单链表的基础上再增加一个指针域,用于指向它的前驱结点 二:双链 ...

最新文章

  1. wifi动不动就断开_手机信号满格,但是WIFI经常掉线!我来教你怎么办
  2. dbeaver连接mysql 驱动jar_用Intellij Idea创建一个普通的Java工程并用JDBC连接数据库...
  3. jsoncpp去掉多余字符_如何处理JSON中的特殊字符
  4. SpringMVC 入门示例讲解
  5. mysql连接数过多
  6. mysql如何修改字段名字_mysql如何修改字段名称
  7. 办公室计算机打印机共享,办公室共享连接打印机全攻略,办公人必会操作技能...
  8. 使用python实现简单网页图片抓取
  9. win10现在可以双击跑jar包了
  10. 软工个人随笔3 罗骏 201521123121
  11. RPA之家视频讲解RPA-3
  12. 基于JAVA医院预约挂号系统设计与实现 开题报告
  13. 《魔兽争霸》故事背景
  14. 2022程序员都推荐的算法编程课程终于来了!新手从入门到面试考点全覆盖,学到就是赚到!...
  15. 内网服务器如何提供外网远程连接访问
  16. ORACLE创建一个‘数据库’
  17. PR AE安装成功后启动卡死的解决
  18. 集成讯飞离线语音合成SDK报:“ 未经授权的语音应用.(错误码:11210)“ 问题解决
  19. latex常见错误之缺少sty文件
  20. 7个好用的运维监控工具,你在用哪个?

热门文章

  1. android 模块混淆配置,使用android studio混淆多个模块
  2. 禁止html页面无法粘贴复制,javascript中如何禁止复制粘贴?
  3. linux内存报警,linux 邮件报警,监控内存cup
  4. 你修改了样式,却要我手动清除游览器缓存,这是BUG!
  5. 1小时搞懂设计模式之委派模式
  6. 基于JAVA+Servlet+JSP+MYSQL的电影院购票系统
  7. javascript精雕细琢(三):作用域与作用域链
  8. Magisk —— 安卓新一代的第三方拓展,systemless模式
  9. 论 BUG调试与(程序猿)初学者
  10. oracle 常见错误