python关于链表的一点知识
2018-03-27 16:12
337 查看
https://www.cnblogs.com/king-ding/p/pythonchaintable.html
链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.
链表的数据结构如下图所示
在链表中删除操作可以通过修改指针来实现,如下图所示:
插入则是调整,插入点的前后两个指针的指向关系,如下图所示:
但是和c不一样,python没有专门的指针概念,在python中每个变量都是指针,例如:
用内置数据结构(list, dict, tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}
类的成员变量、嵌套类可能包含了指向/嵌套关系;
引用表示指向关系,只不过引用不能像指针一样运算,比如 p + 1 指向下一个元素,所以可能限制颇多因此,要实现链表的操作,不能和c一样直接对指针进行操作.
链表实现
实现链表总体需要两部
1.定义链表:
[java] view plain copy # Definition for singly-linked list.
class ListNode(object):
def __init__(self):
self.val = None
self.next = None
2.对链表进行操作
[python] view plain copy class ListNode_handle:
def __init__(self):
self.cur_node = None
def add(self, data):
#add a new node pointed to previous node
node = ListNode()
node.val = data
node.next = self.cur_node
self.cur_node = node
return node
def print_ListNode(self, node):
while node:
print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next
node = node.next
def _reverse(self, nodelist):
list = []
while nodelist:
list.append(nodelist.val)
nodelist = nodelist.next
result = ListNode()
result_handle = ListNode_handle()
for i in list:
result = result_handle.add(i)
return result
其中对链表进行操作部分,大致是包括添加新的node, 反向排列链表, 打印链表.添加链表节点时候操作如下:
假设有要完成链表操作为:
[java] view plain copy ListNode_1
链表是:
[java] view plain copy l1 = ListNode()
且需要吧1,8,3按1 -->8 -->3的顺序放入链表中,需要进行的操作则
[java] view plain copy ListNode_1 = ListNode_handle()
l1 = ListNode()
l1_list = [1,8,3]
for i in l1_list:
l1 = ListNode_1.add(i)
结果是:1 -->8 -->3
调用反向排列链表方式如下:
[python] view plain copy <span style="font-size:18px;">l1 = ListNode_1._reverse(l1)</span>
打印链表的操作如下:
[python] view plain copy <span style="font-size:18px;">ListNode_1.print_ListNode(l1)</span>
GitHub: https://github.com/DinnerHowe/LeetCode.git
参考:
http://www.aspku.com/tech/jiaoben/python/83593.html
知乎
链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.
链表的数据结构如下图所示
在链表中删除操作可以通过修改指针来实现,如下图所示:
插入则是调整,插入点的前后两个指针的指向关系,如下图所示:
但是和c不一样,python没有专门的指针概念,在python中每个变量都是指针,例如:
用内置数据结构(list, dict, tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}
类的成员变量、嵌套类可能包含了指向/嵌套关系;
引用表示指向关系,只不过引用不能像指针一样运算,比如 p + 1 指向下一个元素,所以可能限制颇多因此,要实现链表的操作,不能和c一样直接对指针进行操作.
链表实现
实现链表总体需要两部
1.定义链表:
[java] view plain copy # Definition for singly-linked list.
class ListNode(object):
def __init__(self):
self.val = None
self.next = None
2.对链表进行操作
[python] view plain copy class ListNode_handle:
def __init__(self):
self.cur_node = None
def add(self, data):
#add a new node pointed to previous node
node = ListNode()
node.val = data
node.next = self.cur_node
self.cur_node = node
return node
def print_ListNode(self, node):
while node:
print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next
node = node.next
def _reverse(self, nodelist):
list = []
while nodelist:
list.append(nodelist.val)
nodelist = nodelist.next
result = ListNode()
result_handle = ListNode_handle()
for i in list:
result = result_handle.add(i)
return result
其中对链表进行操作部分,大致是包括添加新的node, 反向排列链表, 打印链表.添加链表节点时候操作如下:
假设有要完成链表操作为:
[java] view plain copy ListNode_1
链表是:
[java] view plain copy l1 = ListNode()
且需要吧1,8,3按1 -->8 -->3的顺序放入链表中,需要进行的操作则
[java] view plain copy ListNode_1 = ListNode_handle()
l1 = ListNode()
l1_list = [1,8,3]
for i in l1_list:
l1 = ListNode_1.add(i)
结果是:1 -->8 -->3
调用反向排列链表方式如下:
[python] view plain copy <span style="font-size:18px;">l1 = ListNode_1._reverse(l1)</span>
打印链表的操作如下:
[python] view plain copy <span style="font-size:18px;">ListNode_1.print_ListNode(l1)</span>
GitHub: https://github.com/DinnerHowe/LeetCode.git
参考:
http://www.aspku.com/tech/jiaoben/python/83593.html
知乎
相关文章推荐
- 关于数理统计基础知识的一点补漏
- 【脚本语言系列】关于Python基础知识兼容Python 2.x+Python 3.x,你需要知道的事
- python-关于类的几点基础知识
- 关于android中的shape的一点知识
- 关于UDP socket的一点小知识
- android 积累一点关于fragment的知识
- python apply的一点知识
- 关于python的基础知识10--数据分析和数值计算
- 『Python』关于Pandas的一点用法
- android关于adb的一点小知识
- 关于python的基础知识15 -- 语法错误和异常
- 【脚本语言系列】关于Python基础知识文件操作,你需要知道的事
- 关于点击tab控件显示图片的一点知识
- 关于这几天学习的一点知识(js,thinkphp等)
- 关于均方差的一点知识
- python简明教程里关于zip的一点解决办法
- 关于linux shell的一点知识
- 关于jxl的一点知识
- 【脚本语言系列】关于Python基础知识处理字符串,你需要知道的事
- 关于预处理器的一点知识