节点只包含了一个数据项和对下一个节点的引用,定义一个单链表节点类如下:
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()
: