转载:http://t.csdnimg.cn/ikeiE,更详细
class Node(object):
"""创建单个结点类"""
def __init__(self, data):
self.data = data
self.next = None
#注意类的初始化,则实例化时需要参数data,而nex不需要
class SingleLinkedList(object):#SingleLinkedList的实例化则不需要参数了
"""创建一个单链表"""
def __init__(self):
self.head = None
def is_empty(self):
"""判断链表是否为空"""
return self.head is None#head是头节点,不是data也不是next指针
def length(self):
"""获取链表的长度"""
cur = self.head#这里的self是指链表,cur表示当前指针所指向的结点
count = 0
while cur is not None:#节点非空
count += 1
cur = cur.next#当前指针指向的节点的next指针指向的节点赋予给cur
return count#所以不要把next指针当作索引或者指针本身,当作它指向的内容
def add_fist(self, data):
"""在链表的头部添加元素"""
node = Node(data)#创建节点实例
node.next = self.head#新结点的指针指向原来的头节点
self.head = node#self的头换成新结点
def add_last(self, data):
"""在链表的尾部添加元素"""
node = Node(data)
if self.is_empty():
self.head = node
else:
cur = self.head
while cur.next is not None:#找到最后一个节点
cur = cur.next
cur.next = node#让最后一个节点指向新结点
def insert_node(self, index, data):
"""在指定位置(在第index个节点位置添加新结点)添加元素"""#11111111111
node = Node(data)
if index < 0 or index > self.length():
return False
elif index == 0:
self.add_fist()
elif index == self.length():
self.add_last()
else:
cur = self.head
count = 0
while count < index - 1:#找到第index-1个节点
cur = cur.next
count += 1
node.next = cur.next#新节点的指针指向原来第index个节点
cur.next = node#第index-1节点的指针指向node
def remove_node(self, data):#2222222222222222222222222222222
"""删除指定结点"""
cur = self.head # 指针指向的结点
pre = None # 指针指向结点的前一个
if self.head == data:
self.head.next = self.head
else:
while cur.data is not data:
pre = cur
cur = cur.next
pre.next = cur.next
def search_node_is_exist(self, data):
"""查找指定结点是否存在"""
cur = self.head
while cur is not None:
if cur.data == data:
return True
else:
cur = cur.next
return False
def traversal(self):
"""遍历整个链表"""
cur = self.head
while cur is not None:
print(cur.data)
cur = cur.next
if __name__ == '__main__':
lists = SingleLinkedList()
lists.add_fist(2)
lists.add_fist(1)
lists.add_last(4)
lists.insert_node(2, 3)
lists.traversal()
print(lists.is_empty())
print(lists.length())
lists.remove_node(4)
print(lists.search_node_is_exist(3))
lists.traversal()