链表由一系列不必在内存中相连的结构构成,这些对象按线性顺序排序。每个结构含有表元素和指向后继元素的指针。最后一个单元的指针指向NULL。为了方便链表的删除与插入操作,可以为链表添加一个表头。
链表的常用方法:
- LinkedList() 创建空链表,不需要参数,返回值是空链表
- is_empty() 测试链表是否为空,不需要参数,返回值是布尔值
- append(data) 在尾部增加一个元素作为列表最后一个。参数是要追加的元素,无返回值
- iter() 遍历链表,无参数,打印元素。
- insert(index,value) 插入一个元素,参数为插入元素的索引和值
- remove(index)移除1个元素,参数为要移除的元素或索引,并修改链表
- size() 返回链表的元素数,不需要参数,返回值是个整数
- search(item) 查找链表某元素,参数为要查找的元素,返回是布尔值
python方法实现:
class Node(object):
def __init__(self, data, next = None):
self.data = data
self.next = next
class Singlelinklist(object):
#创建空链表
def __init__(self):
self.head = None
self.tail = None
#测试是否为空
def isempty(self):
return(self.head is None)
#尾部增加元素
def append(self, data):
node = Node(data)
if self.head is None:
self.head = node
self.tail = node
else:
self.tail.next = node
self.tail = node
#删除一个元素
def remove(self, index):
if self.head is None: #empty list
print('The linklist is empty!')
return
temp = self.head
temp_idx = 0
while temp_idx < index - 1:
temp = temp.next
if temp is None:
print('List length less than index!')
return
temp_idx += 1
if self.head is self.tail: #list only have one node
self.head = None
self.tail = None
return
if index == 0: #remove the first node
self.head = temp.next
return
if temp.next is None: #remove the last node
self.tail = temp
temp.next = temp.next.next
#遍历链表
def iter(self):
if not self.head:
return
temp = self.head
print(temp.data)
while temp.next:
temp = temp.next
print(temp.data)
#插入一个元素
def insert(self, index, value):
if self.head is None:
print('The list is empty!')
return
temp = self.head
temp_idx = 0
while temp_idx < index - 1:
temp = temp.next
temp_idx += 1
node = Node(value)
node.next = temp.next
temp.next = node
if node.next is None:
self.tail = node
#获取元素数
def size(self):
if self.head is None:
print('The list is empty!')
return
temp = self.head
count = 0
while temp is not None:
count += 1
temp = temp.next
return count
#查找一个元素
def search(self, item):
found = False
temp = self.head
while temp is not None and not found:
if temp.data == item:
found = True
else:
temp = temp.next
return found
if __name__ == '__main__':
link = Singlelinklist()
link.append(3)
link.append(5)
link.append(6)
link.insert(1, 4)
link.iter()
link.remove(1)
print(link.size())
print(link.search(3))