代码实现
以下代码实现了单向链表最基本的增、删、查函数借口。
class SingleNode():
def __init__(self, data):
self.data = data
self.next = None
class SingleLinkList():
def __init__(self):
self._head = None
self._size = 0
# 头插
def add(self,data):
node = SingleNode(data)
node.next = self._head
self._head = node
self._size += 1
# 尾插
def append(self, data):
node = SingleNode(data)
cur = self._head
while cur and cur.next:
cur = cur.next
if not cur:
self._head = node
else:
cur.next = node
self._size += 1
# 任意位置插入数据
def insert(self, data, pos):
cur = self._head
# 复用头插、尾插
if pos <= 0:
self.add(data)
elif pos >= self._size:
self.append(data)
else:
cur = self._head
pre = None
while pos:
pre = cur
cur = cur.next
pos -= 1
node = SingleNode(data)
node.next = cur
pre.next = node
self._size += 1
def remove(self, data):
cur = self._head
pre = None
if cur is None:
return
if cur.data == data:
self._head = cur.next
else:
while cur is not None:
if cur.data == data:
pre.next = cur.next
self._size -= 1
break
else:
pre = cur
cur = cur.next
# 找到则返回元素位置,没找到返回-1
def search(self, data):
cur = self._head
pos = 0
if cur is None:
return
else:
while cur:
if cur.data == data:
return pos
else:
cur = cur.next
pos += 1
return -1
def travel(self):
cur = self._head
while cur:
print("{}".format(cur.data), end="->")
cur = cur.next
print("null")
if __name__ == "__main__":
l = SingleLinkList()
l.append(2)
l.add(3)
l.add(4)
l.append(1)
l.travel()
l.insert(10, 0)
l.travel()
l.insert(100, 100)
l.travel()
l.remove(10)
l.travel()
l.remove(100)
l.travel()
l.remove(2)
l.travel()
print(l.search(2))
print(l.search(4))
print(l.search(1))