节点只包含了一个数据项和对下一个节点的引用,定义一个单链表节点类如下:
class Node(object):
def __init__(self,item):
self.item=item
self.next=None
单链表类的实现如下,包含:
is_empty():判断是否为空链表
length():链表长度
traverse():链表遍历
add():head添加item
append():尾部添加item
insert():其他任意位置添加item
remove():删除item
research():查找item是否存在
class LinkedList(object):
def __init__(self):
self.head=None
def is_empty(self):
return self.head==None
def length(self):
"链表长度"
cur=self.head
count=0
while cur!=None:
cur=cur.next
count+=1
return count
def traverse(self):
"遍历链表"
cur=self.head
while cur!=None:
print(cur.item)
cur=cur.next
print("遍历结束")
def add(self,item):
"头部添加元素"
node=Node(item)
if self.is_empty():
self.head=node
else:
node.next=self.head
self.head=node
def append(self,item):
"尾部添加元素"
node=Node(item)
if self.is_empty():
self.head=node
else:
cur=self.head
while cur.next!=None:
cur=cur.next
cur.next=node
def insert(self,pos,item):
"指定位置添加元素"
if pos<=0:
self.add(item)
elif pos>self.length():
self.append(item)
else:
node=Node(item)
count=0
cur=self.head
while count<pos-1:
count+=1
cur=cur.next
"先将新的节点的node的next指针指向原来的cur的next"
"将插入位置的前一个节点的next指向新的节点"
node.next=cur.next
cur.next=node
def remove(self,item):
"删除节点"
cur=self.head
pre=None
while cur!=None:
if cur.item==item:
"第一个就是要删除的节点"
if not pre:
self.head=cur.next
else:
pre.next=cur.next
break
else:
pre=cur
cur=cur.next
def search(self,item):
"查找节点是否存在"
cur=self.head
while cur!=None:
if cur.item==item:
return True
cur=cur.next
return False
测试
if __name__ == "__main__":
li= LinkedList()
li.add(1)
li.add(2)
li.append(3)
li.insert(2, 4)
print("length:",li.length())
li.traverse()
: