python实现单链表详解_python实现单链表

#encoding:utf-8

import sys

class Lnode():

def __init__(self,elem,next=None):

self.elem = elem    #节点的值

self.next = next    #指向下一个节点

def getelem(self):

return self.elem

def getnext(self):

return self.next

class linklist(object):

def __init__(self):

L = Lnode(None,None)

self.head = L       #定义头节点

self.length = 0     #链表元素个数

# 链表是否为空

def isempty(self):

if self.head.next is None:

return True

else:

return False

def getlength(self):

return self.length

#尾部添加

def append(self,elem):

newNode = Lnode(elem)

if self.head.next is None:

self.head.next = newNode

else:

p = self.head

while p.next is not None:

p = p.next

p.next = newNode

self.length += 1

#头部添加

def headpush(self,elem):

newNode = Lnode(elem)

if self.isempty():

self.head.next = newNode

else:

newNode.next = self.head.next

self.head.next = newNode

self.length += 1

#在指定元素的位置后面插入

def insertafter(self,elem,newelem):

newNode = Lnode(newelem)

if self.find(elem) == -1:

print "%s in the link list" %elem

return -1

else:

#如果在链表中找到元素elem

p = self.find(elem)

if p.next is None:

p.next = newNode

else:

newNode.next = p.next

p.next = newNode

self.length += 1

# 在指定元素的位置前面插入

def insertbefor(self,elem,newelem):

newNode = Lnode(newelem)

if self.find(elem) == -1:

print "%s in not the link list" % elem

return -1

else:

p = self.head

q = self.find(elem)

while p is not None:

if p.next == q:

break

p = p.next

newNode.next = q

p.next = newNode

self.length += 1

#遍历链表

def for_each(self):

if self.head.next is None:

print "empty"

return

else:

p = self.head

while p.next is not None:

p = p.next

sys.stdout.write("%s " %(p.elem))

print

return

#查找元素,返回指向该元素的节点

def find(self,elem):

#找到元素返回节点,未找到返回-1

if self.isempty():

print "sorry,is empty"

return -1

else:

p = self.head

while p is not None:

if p.elem == elem:

return p

else:

p = p.next

return -1

#修改指定元素

def modify(self,elem,newelem):

if self.find(elem) != -1:

#如果找到

p = self.find(elem)

p.elem = newelem

return 0

else:

print "%s is not in the linklist" %elem

return -1

#删除指定元素

def delnode(self,elem):

if self.find(elem) != -1:

#如果找到

p = self.find(elem)

q = self.head

while q.next != p:

q = q.next

q.next = p.next

p.next = None

else:

print "%s is not in the linklist" %elem

return -1

def main():

#创建链表

ll = linklist()

print ll.isempty()

#尾部添加元素

ll.append(3)

ll.append(4)

ll.append(5)

ll.for_each()

print ll.getlength()

#首部添加元素

ll.headpush(2)

ll.for_each()

print ll.getlength()

#查找元素

print ll.find(3).elem

ll.insertafter(3,3.3)

ll.for_each()

print ll.getlength()

#测试后插法

ll.insertafter(1,1.1)

#测试前插法

ll.insertbefor(5,3.9)

ll.for_each()

print ll.getlength()

#修改指定元素

ll.modify(3.9,44)

ll.for_each()

ll.modify(3.8,88)

#删除指定元素

ll.delnode(3.3)

ll.for_each()

ll.delnode(2)

ll.delnode(2)

ll.delnode(3)

ll.delnode(4)

ll.delnode(44)

ll.delnode(5)

ll.for_each()

if __name__ == ‘__main__‘:

main()

运行结果

True

3 4 5

3

2 3 4 5

4

3

2 3 3.3 4 5

5

1 in the link list

2 3 3.3 4 3.9 5

6

2 3 3.3 4 44 5

3.8 is not in the linklist

2 3 4 44 5

2 is not in the linklist

empty

Process finished with exit code 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值