p
y
t
h
o
n
实
现
单
链
表
python实现单链表
python实现单链表
难点
1.节点构造
class _Node:
def __init__(self, e=None, node_next=None):
self.e = e
self.next = node_next
2.add
def add(self, index, e):
if index < 0 or index > self._size:
raise ValueError('Add failed. Illegal index.')
prev = self._dummy_head
for i in range(index):
prev = prev.next
node = self._Node(e)
node.next = prev.next
prev.next = node
self._size += 1
3.delete
def remove(self, index):
if index < 0 or index >= self._size:
raise ValueError('Remove failed. Illegal index.')
prev = self._dummy_head
for i in range(index):
prev = prev.next
ret = prev.next
prev.next = ret.next
ret.next = None
self._size -= 1
return ret.e
练习三部曲之一
class LinkedList:
class _Node:
def __init__(self, e=None, node_next=None):
self.e = e
self.next = node_next
def __str__(self):
return str(self.e)
def __repr__(self):
return self.__str__()
def __init__(self):
self._dummy_head = self._Node()
self._size = 0
def __str__(self):
curr = self._dummy_head.next
data = []
while curr:
data.append(str(curr.e))
curr = curr.next
return '(Head) ' + ' -> '.join(data) + ' (Tail)'
def __repr__(self):
return self.__str__()
def get_size(self):
return self._size
def is_empty(self):
return self._size == 0
def add(self, index, e):
if index < 0 or index > self._size:
raise ValueError('Add failed. Illegal index.')
prev = self._dummy_head
for i in range(index):
prev = prev.next
node = self._Node(e)
node.next = prev.next
prev.next = node
self._size += 1
def add_first(self, e):
self.add(0, e)
def add_last(self, e):
self.add(self._size, e)
def remove(self, index):
if index < 0 or index >= self._size:
raise ValueError('Remove failed. Illegal index.')
prev = self._dummy_head
for i in range(index):
prev = prev.next
ret = prev.next
prev.next = ret.next
ret.next = None
self._size -= 1
return ret.e
def remove_first(self):
return self.remove(0)
def remove_last(self):
return self.remove(self._size - 1)
def setter(self, index,e):
if index < 0 or index >= self._size:
raise ValueError('Set failed. Illegal index.')
curr = self._dummy_head.next
for i in range(index):
curr = curr.next
curr.e = e
def get(self, index):
if index < 0 or index >= self._size:
raise ValueError('Get failed. Illegal index.')
curr = self._dummy_head.next
for i in range(index):
curr = curr.next
return curr.e
def get_first(self):
return self.get(0)
def get_last(self):
return self.get(self._size - 1)
def contains(self, e):
curr = self._dummy_head.next
while curr:
if curr.e == e:
return True
curr = curr.next
return False
练习三部曲之二
class LinkedList:
class _Node:
def __init__(self, e=None, node_next=None):
def __str__(self):
def __repr__(self):
def __init__(self):
def __str__(self):
def __repr__(self):
def get_size(self):
def is_empty(self):
def add_first(self, e):
def add_last(self, e):
def add(self, index, e):
def remove(self, index):
def remove_first(self):
def remove_last(self):
def setter(self, index,e):
def get(self, index):
def get_first(self):
def get_last(self):
def contains(self, e):
练习三部曲之三
class LinkedList: