链表节点包含两个元素:节点的值和指向的下一个节点,因此可以定义链表的类为:

class linknode:
def __init__(self,value=None,next=None):
self.value=value
self.next=next

  给定一个列表l,用此列表生成一个链表时,只需按顺序遍历列表,使用遍历到的值生成链表节点,并在前后两个节点之间建立联系,最后返回头节点。

def createlink(l):
head=linknode(l[0])
nn=head
for i in l[1:]:
nn.next=linknode(i)
nn=nn.next
return head

  输出一个链表,按顺序访问列表节点即可。

def printlist(head):
if head==None: return
node=head
while node!=None:
print(node.value)
node=node.next

  链表的反向是指对链表的方向进行反转。如给定链表:1->2->3->4->5,

反向后的链表为:5->4->3->2->1

反向的关键在于,在反向的过程中,不能丢掉了原来链表节点之间的联系,如对前两个节点反向时,执行2.next=1后,则对于前两个节点,方向为2->1

但对于整个链表来说,由于2.next已经被更新,链表成为

就无法继续访问后续节点。所以,在反向的过程中,要记录的节点有三个:前一个节点pre,当前节点cur,下一个节点next,这样,在执行cur.next=pre后,还可以继续对next进行操作,代码如下。

def reverselink(head):
if head==None: return
if head.next==None: return head
reversehead=None
pre,cur,next=None,head,head.next
while next!=None:
cur.next=pre
pre=cur
cur=next
next=next.next
else:reversehead=cur
return reversehead

  

最新文章

  1. python random模块
  2. configuration error-could not load file or assembly crystaldecisions.reportappserver.clientdoc
  3. Ubuntu菜鸟入门(五)—— 一些编程相关工具
  4. Android Frameworks层介绍
  5. 编写高效且优雅的 Python 代码
  6. 【转】Spring@Autowired注解与自动装配
  7. C#创建Excel
  8. android中ImageView讲解
  9. 键盘-App监听软键盘按键的三种方式
  10. 构建高性能服务(三)Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue--转载
  11. WSDL 文档解析
  12. php or || 和 and &&
  13. C语言最后一次作业——总结报告
  14. Java面试题中常考的容易混淆的知识点区别
  15. CentOS7部署Flask+Gunicorn+Nginx+Supervisor
  16. linux部署小结
  17. acm入门练习心得
  18. 软件测试思维导图[ZZ]
  19. xpath教程 2 - lxml库
  20. How do you add?(递推)

热门文章

  1. 【转】Deep Learning(深度学习)学习笔记整理系列之(八)
  2. SpringData_Repository接口概述
  3. ZOJ Monthly, March 2018 Solution
  4. Entity Framework在WCF中序列化的问题(转)
  5. 【运维技术】node项目使用strongloop进行部署相关教程
  6. 大数据领域两大最主流集群管理工具Ambari和Cloudera Manger
  7. Python笔记 #10# Histograms
  8. Python基础笔记之同时装了Python3和Python2,怎么在命令行使用pip
  9. Puppeteer前端自动化测试实践
  10. 20145303 刘俊谦《网络对抗》逆向及BOF基础实践