class Node: def __init__(self,x=0): self.val=x self.next=None
class ChainNode: def __init__(self): self.head = None self.length = 0
#在链表末尾添加一个数值为x的结点 def append(self,x): item=Node(x) if not self.head: self.head=item self.length+=1 else: node=self.head while node.next: node=node.next node.next=item self.length+=1
#更新下标为index+1(第几个结点)的结点的val def update(self,index,replace): if self.isempty() or index>self.length: print('修改下标错误') return False node=self.head i=1 while node and i<index: node=node.next i+=1 node.val=replace
def isempty(self): if self.length==0: return True else: return False
def insert(self,index,replace): if index>self.length: print('插入下标错误') return False item=Node(replace) if index == 0: item.next = self.head self.head = item self.length += 1 return else: i=0 node=self.head prev=self.head while node and i<index: prev=node node=node.next i+=1 if i ==index: item.next=node prev.next=item self.length+=1
def delete(self,index): if self.isempty(): print('this chain isempty!! we cant delete') return if index<0 or index>=self.length: print('index that you delete out range of chain!!') return if index==0: self.head=self.head.next self.length-=1 return # prev为保存前导节点 # node为保存当前节点 # 当j与index相等时就 # 相当于找到要删除的节点 j = 0 node = self.head prev = self.head while node.next and j<index: prev=node node=node.next j+=1 if j==index: prev.next=node.next self.length-=1
if __name__ == '__main__': chain=ChainNode() for i in range(10): chain.append(i) chain.insert(0,100) chain.delete(12) tmp=chain.head while tmp: print(tmp.val) tmp=tmp.next print(chain.length)