永发信息网

python 单向链表问题

答案:2  悬赏:0  手机版
解决时间 2021-02-08 07:04
class SingleNode():
def __init__(self,item):
self._item=item
self._next=None
#获取节点的值
def getItem(self):
return self._item
#获取下一个指针
def getNext(self):
return self._next
#设置下一个节点
def setNext(self,newnext):
self._next=newnext

class SingleLinkedList():
#定义一个头单向链表的头指针
def __init__(self):
self._head=None
#判断链表是否为空
def isEmpty(self):
return self._head==None

#链表的长度
def size(self):
current=self._head
count=0
#当链表不为空
while current!=None:
count+=1
#将current后移一个节点
current=current.getNext()
return count

#遍历链表
def travel(self):
#将头节点赋给current
current=self._head
while current!=None:
#打印当前节点的值
print current.getItem()
current=current.getNext()

#链表头部添加节点
def add(self,item):
#新建一个节点
temp=SingleNode(item)
#新节点的下一个节点为头指针指向的值
temp.setNext(self._head)
#将新节点设置为头指针指向的节点
self._head=temp

#链表尾部添加节点
def append(self,item):
temp=SingleNode(item)
if self.isEmpty():
self._head=temp
else:
current=self._head
#当前节点的下一个节点不为空
while current.getNext()!=None:
current=current.getNext()
#最后一个节点的下一个节点为要添加的节点
current.setNext(temp)

#链表查找节点是否存在,并返回True或者False
def search(self,item):
current=self._head
founditem=False
while current!=None and not founditem:
if current.getItem()==item:
founditem=True
else:
current=current.getNext()
return founditem

#删除链表中的节点
def remove(self,item):
current=self._head
pre=None
while current!=None:
if current.getItem()==item:
#如果第一个就是删除的节点
if not pre:
#将头指针指向头节点的后一个节点
self._head=current.getNext()
else:
#将要删除节点的前一个节点的指针指向该节点之后的一个节点
pre.setNext(current.getNext())
break
else:
#就继续按链表后移节点
pre=current
current=current.getNext()

SingleLinkedList类中的add函数添加第3个数值的时候不会顶掉第二个数值吗?
如果不会那为什么 SingleNode类的setNext不是赋值语句吗?麻烦请解答 谢谢
最佳答案
不会。
实际上,SingleLinkedList只存储了链表的表头节点的位置。
每次调用add函数,相当于新建了一个节点,
调用setNext将其下一节点指向现在链表的表头,
然后将新建的节点位置作为新的表头位置保存在链表里面。
要得到链表的所有节点必须从表头节点开始一个一个往下跳转,一直跳转到下一节点位置为None,则表示查询完毕。
全部回答
node没什么问题,就是变量定义的时候是一个下划线而不是两个 stack这里有点问题, (不知道你这里为啥需要做成一个循环的链表,不过不管了) 1. 首先你得定义一个head和一个tail,这样的话才能把tail和head连接形成一个循环 2. 初始化stack的话把head和tail都设置成none表示这是个空的stack 3. push的话看你喜欢这么写了,比较喜欢的是把push进去的node作为新的head,然后修改一下self._head为新node,然后修改新node的next为老的head,再连接一下tail和head便可,这样就省掉一些循环 4. pop的话就加一些判定好了,首先看head是不是none,如果是就说明stack是空的。如果发现tail和head都是同一个的话就说明stack里就一项了,提取完head之后就设置stack为空吧。然后先提取head,然后读取head后面的那一个node并且设置为新的head,然后再连接一下tail和head便可 5. 附上代码供参考. class node:     def __init__(self, newdata):         self._data = newdata         self._next = none     def getdata(self):         return self._data     def getnext(self):         return self._next     def setdata(self, newdata):         self._data = newdata     def setnext(self, newnode):         self._next = newnode class stack:     def __init__(self):         self._head = none         self._tail = none     def push(self, data):         print 'push',data,'into stack'         new = node(data)         cur = self._head         end = self._tail         if cur is none:             self._head = new             new.setnext(new)             self._tail = new         else:             new.setnext(self._head)             self._head = new             self._tail.setnext(new)     def pop(self):         if self._head is not none:             cur = self._head             print 'pop',cur.getdata(),'out of stack'             if cur.getnext() is not cur:                 self._head = cur.getnext()                 self._tail.setnext(self._head)             else:                 self._head = none                 self._tail = none         else:             print 'stack is empty' my = stack() for i in range(5):     my.push(i) for i in range(6):     my.pop()
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三色源图文地址在什么地方,我要处理点事
什么是体寒体质
仙竹小院我想知道这个在什么地方
三国演义好词好句要标第几回
【bedclothes】""床上用品""英语怎么说?不是b
在手机版新浪微博里看视频要返回为什么还会有
深度摄影(凤苑路6号楼204深度摄影)地址有知道
鸣记炭火烤全鱼黑石礁店在什么地方啊,我要过
电脑屏幕放大了怎么缩小啊
那些年我们追过的女孩儿电视剧台湾的女明星有
丽阁软装生活馆地址在什么地方,想过去办事
顺丰广告(利民路103)地址在什么地方,想过去
凡铭摄影地址在哪,我要去那里办事
张记正宗贞丰豆米地摊火锅地址在什么地方,想
不属于并开药名的是A.潼白蒺藜B.冬瓜皮子C.马
推荐资讯
汪清县四达培训中心地址好找么,我有些事要过
别人给我寄东西,我还用付邮费吗?
中国电信(电信营业厅)(狮子山路狮矿小学旁)怎
求助各位大神,C语言程序设计,输入5个学生输
八九同时大门守。打一字。
西安市机电化工国有资产管理公司地址在哪,我
CC霜到底怎么使用?擦了水,乳液后我就直接擦
网上说潜水是什么意思?
为什么自动获取ip能上网固定不能上
莲蓬是什么颜色
请问 环形电流的安培力方向如何?
剖腹产除去职工保险报销外工会给报销吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?