class Node(object):
"""
data:数据段
next:指针段
"""
def __init__(self, value, next=Node):
self.value = value
self.next = next
def __repr__(self):
"""
用来定义Node的字符输出
print 为输出data
"""
return str(self.data)
class LinkedList(object):
def isEmpty(self):
return self.length == 0
def append(self, dataOrNode):
item = Node
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if not self.head:
self.head = item
self.length += 1
else:
node = self.head
while node._next:
node = node._next
node._next = item
self.length += 1
#删除一个节点之后记得要把链表长度减一
def delete(self, index):
#要注意删除第一个节点的情况
#如果有空的头节点就不用这样
#但是我不喜欢弄头节点
if self.isEmpty():
print("this chain table is empty.")
return
if index < 0 or index >= self.length:
print("error, out of space")
return
if index == 0:
self.head = self.head._next
self.length -= 1
return
#prev为保存前导节点
#node为保存当前节点
#当j与index相等时就
#相当于找到要删除的节点
j = 0
node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j += 1
if j == index:
prev._next = node._next
self.length -= 1
def update(self, index, data):
if self.isEmpty() or index < 0 or index >= self.length:
print("error! out of space")
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
if j == index:
node.data = data
def getItem(self, index):
if self.isEmpty() or index < 0 or index >= self.length:
print("error: out of space")
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
return node.data
def getIndex(self, data):
j = 0
if self.isEmpty():
print("this chain table is empty")
return
node = self.head
while node:
if node.data == data:
return j
node = node._next
j += 1
if j == self.length:
print("%s not found" % str(data))
return
def insert(self, index, dataOrNode):
if self.isEmpty():
print("this chain table is empty")
return
if index < 0 or index >= self.length:
print("error: out of space")
return
item = Node
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if index == 0:
item._next = self.head
self.head = item
self.length += 1
return
j = 0
node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j += 1
if j == index:
item._next = node
prev._next = item
self.length += 1
def update(self, index, data):
if self.isEmpty() or index < 0 or index >= self.length:
print("error: out of space")
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
if j == index:
node._data = data
def getItem(self, index):
if self.isEmpty() or index < 0 or index >= self.length:
print("error, out of space")
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
return node.data
def getIndex(self, data):
j = 0
if self.isEmpty():
print("this chain table is empty")
return
node = self.head
while node:
if node.data == data:
return j
node = node._next
j += 1
if j == self.length:
print("%s not found" %str(data))
return
def clear(self):
self.head = Node
self.length = 0