class LNode:
def __init__(self,elem,next_=None):
self.elem=elem
self.next=next_ #存放元素下一个结点
def length(self):
'''返回链表长度,使用head调用返回整个链表的长度
通过特定实例化对象的调用,可以返回该实例化对象距离表尾有几个元素(包括本身)'''
pr,n=self,0
while pr!=None:
n+=1
pr=pr.next
return n
#初始表头
p=LNode(0)
head=p
'''插入元素'''
#在表头插入元素
q=LNode(13)
q.next=head #把原表头所代表的节点赋给q的next域
head=q #交接完成后,head可以变成新节点了
#在某一位置插入节点(已知把m插入上述的q,p之间),这个同样可以实现在表尾插入(但没有第三行了)
m=LNode(17) #定义的这个节点是与链表脱离的(既没有前趋也没有后继)
q.next=m
m.next=p
'''删除元素'''
#删除表首元素,原表头直接被解释器回收
#head=head.next
#删除某特定位置的元素(假设是m节点被删除,需要知道m之前的那个节点)
#q.next=q.next.next
'''链表扫描'''
pointer=head
while pointer!=None: #(也可以附加其他条件)
#print(pointer.elem)
pointer=pointer.next
'''链表定位'''
c=LNode(35)
b=LNode(22,c)
a=LNode(19,b) #增加几个元素(也就是说,通过构造函数直接定义的链表,链表的元素增加要倒着来?)
p.next=a #把abc这个小串穿到p后面
#按下标定位
i=4 #(寻找下标为4的元素)
pointer2=head
while pointer2!=None and i>0:
i=i-1
pointer2=pointer2.next
#print(pointer2.elem) #现在pointer2指针所代表的就是下标为i的元素节点,如果i溢出,指针所指的就是None
#按元素定位(不懂教材中的"谓词"是什么意思)
element=22
pointer3=head
while pointer3!=None and pointer3.elem!=element:
pointer3=pointer3.next
#print(pointer3.elem)
'''一种构造链表的新方法'''#这个例子说明了,节点叫什么名字在结构中并不重要,它的前趋后继才是关键
for i in range(2,20,2):
c.next=LNode(i)
c=c.next
pointer=head
while pointer!=None: #(也可以附加其他条件)
print(pointer.elem)
pointer=pointer.next
'''****************************************'''
#print(head.length()) #返回链表长度
python实现链表增删改查
最新推荐文章于 2024-07-15 19:05:33 发布