您的位置:首页 > 编程语言 > Python开发

python 单链表

2016-02-24 14:21 330 查看
闲着无聊,python单链表

#coding:utf-8
class Linked:
def __init__(self):
self.L = None

def insert(self, k):
self.pprint()
node = self.Node(k)
p = temp = self.L
# 找到合适位置的前一个节点p, 若p==temp,表示应插入到头结点
while temp and cmp(temp.k, k) == -1:
p = temp
temp = temp.next

# 两种情况, 插在头结点还是其他位置
if p==temp==self.L:
node.next = self.L
self.L = node
else:
node.next = p.next
p.next = node

def search(self, k):
node = self.L
while node and cmp(node.k, k) != 0:
node = node.next
return node

def remove(self, k):
self.pprint()
p = temp = self.L
while temp and temp.k != k:
p = temp
temp = temp.next
if temp is None:
# 两种情况,链表为空或者找到了最后
if temp == p:
print 'null linked'
else:
print 'not find %s' % str(k)
else:
# 两种情况,头结点和其余的节点
if temp == p:
self.L = temp.next
else:
p.next = temp.next
del temp
print 'delete %s' % str(k)
def pprint(self):
node = self.L
while node:
print '%s(%s, %s)' % (str(id(node)), str(node.k), str(node.next)),
node = node.next
print

@classmethod
def test(cls):
L = cls()
L.insert(20)
L.insert(18)
L.insert(21)
L.insert(19)

L.remove(24)
L.remove(21)
L.remove(19)
L.remove(18)
L.remove(24)
L.remove(20)
L.remove(20)
L.pprint()
print 'test over'

class Node:
def __init__(self, k):
self.k = k
self.next = None
def __str__(self):
return unicode(id(self))

Linked.test()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: