1. 实现单链表:
class Node(object): """节点""" def __init__(self,item): self.item=item self.next=None class SingleLinkList(object): def __init__(self,node=None): self.__head=node def is_empty(self): """判断链表是否为空""" return self.__head==None def length(self): """求链表的长度(需要特别考虑链表为空的情况)""" cursor=self.__head # 游标,实现单链表的遍历(不断移动cursor指针的位置) count=0 while cursor!=None: count+=1 cursor=cursor.next return count def travel(self): """实现单链表的遍历""" cursor=self.__head while cursor!=None: print(cursor.item) cursor=cursor.next def append(self,item): """往单链表尾部追加元素""" node=Node(item) cursor=self.__head if self.is_empty(): self.__head=node else: while cursor.next!=None: cursor=cursor.next cursor.next=node ssl=SingleLinkList() print(ssl.is_empty()) print(ssl.length()) ssl.append(1) ssl.append(2) ssl.append(3) ssl.append(4) print(ssl.length()) ssl.travel()
运行结果:
2. 实现单链表(完整版)
class Node(object): """节点""" def __init__(self,item): self.item=item self.next=None class SingleLinkList(object): def __init__(self,node=None): self.__head=node def is_empty(self): """判断链表是否为空""" return self.__head==None def length(self): """求链表的长度(需要特别考虑链表为空的情况)""" cursor=self.__head # 游标,实现单链表的遍历(不断移动cursor指针的位置) count=0 while cursor!=None: count+=1 cursor=cursor.next return count def travel(self): """实现单链表的遍历""" cursor=self.__head while cursor!=None: print(cursor.item,end=" ") cursor=cursor.next def append(self,item): """往单链表尾部追加元素(尾插法)""" node=Node(item) cursor=self.__head if self.is_empty(): self.__head=node else: while cursor.next!=None: cursor=cursor.next cursor.next=node def add(self,item): """在单链表头部插入元素(头插法)""" node=Node(item) node.next=self.__head self.__head=node def insert(self,pos,item): """在单链表任意位置插入元素""" count=0 cursor=self.__head node=Node(item) if self.__head==None: node.next=self.__head self.__head=node else: while count!=pos-2: cursor=cursor.next count+=1 node.next=cursor.next cursor.next=node def remove(self,item): """删除一个节点中元素""" cur_left=self.__head if not self.is_empty(): if self.__head.next==None: # 单链表长度为1 if self.__head.item == item: # 删除第一个节点 self.__head = None else: return else: if self.__head.item==item: # 删除第一个节点 self.__head=self.__head.next return cur_right=cur_left.next while cur_right!=None: if cur_right.item==item: if cur_right.next==None: # 删除最后一个节点 self.cur_left.next=None return else: cur_left.next=cur_right.next return else: cur_left=cur_left.next cur_right=cur_right.next ssl=SingleLinkList() print(ssl.is_empty()) print(ssl.length()) ssl.append(1) ssl.append(2) ssl.append(3) ssl.append(4) ssl.add(0) ssl.insert(2,2000) print(ssl.length()) ssl.travel() ssl.remove(2000) print(" ") ssl.travel()
运行结果:
开森~