python链表函数,python写链表

python编程中实现linkedlist(链表)报错是因为什么,怎么解决?

楼主你好!

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计、做网站、奎屯网络推广、小程序设计、奎屯网络营销、奎屯企业策划、奎屯品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供奎屯建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

看你的代码存在很多问题,一个个来说明

1)首先你代码的报错源于你想用list来展开你的SLinkedList类,在python中,除非内置的可迭代对象外,其他都需要实现__iter__()函数,才能用list来进行展开。注意:判断一个对象是否可迭代,请使用isinstance(obj, Iterable)来判断obj是不是可以迭代,Iterable需要从collections中导入

2)插入的方法存在严重问题,按楼主的方法插入的话,因为头节点始终在变,所以当你需要遍历链表的时候就会找不到头节点;

3)pop的方法实现也有问题,因为是单向链,所以无法从末节点开始删除,只能删除头节点

4)top方法的意图未知

其他:

下面列举了一下我修改后的方案,做了一些锦上添花的操作,每个基本操作都会返回链表对象,这样就可以使用链式操作来写代码;迭代函数使用yield来实现,避免展开时占用不必要的内存。

另:我的展开时直接取链表中各个节点的元素,加了一些关键注释在代码中;

# -*- coding: utf-8 -*-

class Node:

def __init__(self):

'''

elm:节点元素

nxt:下个节点指针

'''

self.elm, self.nxt = None, None

class SLinkedList:

def __init__(self):

'''

head: 链表头

end_point: 链表尾

'''

self.head      = None

self.end_point = None

def push(self, x):

p = Node()

p.elm = x

if self.head is None:

self.head      = p

self.end_point = p

return self

self.end_point.nxt = p

self.end_point     = p

return self

def pop(self):

'''因为实现的是一个单链表,所以只能从头开始删除节点'''

if self.head.nxt is None:

return

self.head = self.head.nxt

return self

def __iter__(self):

temp_node = self.head

while temp_node is not None:

yield temp_node.elm

temp_node = temp_node.nxt

if __name__ == '__main__':

'''增加1,2,5三个元素,并删除一个头节点'''

mylinklist = SLinkedList().push(1).push(2).push(5).pop()

print(list(mylinklist))

其实python这个语言使用链表有些画蛇添足,但是如果拿来当作需求练手也无妨。

望采纳,谢谢!

python 单向链表问题

不会。

实际上,SingleLinkedList只存储了链表的表头节点的位置。

每次调用add函数,相当于新建了一个节点,

调用setNext将其下一节点指向现在链表的表头,

然后将新建的节点位置作为新的表头位置保存在链表里面。

要得到链表的所有节点必须从表头节点开始一个一个往下跳转,一直跳转到下一节点位置为None,则表示查询完毕。

python有链表吗

python中的链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接。链表有两种类型:单链表和双链表。

链表的数据结构

在链表中删除操作可以通过修改指针来实现,

插入则是调整,插入点的前后两个指针的指向关系,

在python中每个变量都是指针,例如:

用内置数据结构(list,dict,tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}类的成员变量、嵌套类可能包含了指向/嵌套关系;

引用表示指向关系,只不过引用不能像指针一样运算,比如p+1指向下一个元素,所以可能限制颇多。因此,要实现链表的操作,不能和c一样直接对指针进行操作。

python学习网,大量的免费python视频教程,欢迎在线学习!


分享标题:python链表函数,python写链表
浏览地址:http://pwwzsj.com/article/dsgceid.html