【转发】python:链表定义以及实现

转发自https://blog.csdn.net/DinnerHowe/article/details/58191823

链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.

链表的数据结构如下图所示

Image result for python 链表

在链表中删除操作可以通过修改指针来实现,如下图所示:

Image result for python 链表

插入则是调整,插入点的前后两个指针的指向关系,如下图所示:

Image result for python 链表


但是和c不一样,python没有专门的指针概念,在python中每个变量都是指针,例如:

用内置数据结构(list, dict, tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}
类的成员变量、嵌套类可能包含了指向/嵌套关系;
引用表示指向关系,只不过引用不能像指针一样运算,比如 p + 1 指向下一个元素,所以可能限制颇多
因此,要实现链表的操作,不能和c一样直接对指针进行操作.

链表实现

实现链表总体需要两部

1.定义链表:


   
   
  1. # Definition for singly-linked list.
  2. class ListNode(object):
  3. def __init__( self):
  4. self. val = None
  5. self.next = None

2.对链表进行操作


   
   
  1. class ListNode_handle:
  2. def __init__(self):
  3. self.cur_node = None
  4. def add(self, data):
  5. #add a new node pointed to previous node
  6. node = ListNode()
  7. node.val = data
  8. node.next = self.cur_node
  9. self.cur_node = node
  10. return node
  11. def print_ListNode(self, node):
  12. while node:
  13. print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next
  14. node = node.next
  15. def _reverse(self, nodelist):
  16. list = []
  17. while nodelist:
  18. list.append(nodelist.val)
  19. nodelist = nodelist.next
  20. result = ListNode()
  21. result_handle = ListNode_handle()
  22. for i in list:
  23. result = result_handle.add(i)
  24. return result

其中对链表进行操作部分,大致是包括添加新的node, 反向排列链表, 打印链表.

添加链表节点时候操作如下:

假设有要完成链表操作为:

ListNode_1
   
   
链表是:

l1 = ListNode()
   
   
且需要吧1,8,3按 1 -->8 -->3的顺序放入链表中,需要进行的操作则


   
   
  1. ListNode_1 = ListNode_handle()
  2. l1 = ListNode()
  3. l1_list = [ 1, 8, 3]
  4. for i in l1_list:
  5. l1 = ListNode_1.add(i)
结果是:

1 -->8 -->3


调用反向排列链表方式如下:

l1 = ListNode_1._reverse(l1)

   
   


打印链表的操作如下:

ListNode_1.print_ListNode(l1)
   
   

GitHub: https://github.com/DinnerHowe/LeetCode.git

参考:

http://www.aspku.com/tech/jiaoben/python/83593.html

知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值