创建一个结点类classNode:definit(self,valueNone):self。valuevalueself。prevNoneself。nextNone创建一个双链表classdoubleLink:definit(self):self。headerNone初始化头结点self。length0链表的长度判断链表是否为空defisempty(self):returnself。length0实现向双链表添加元素的功能有三种实现方式:1。头插法2。尾插法3。向双链表的指定位置添加元素1。头插法defadd(self,value):nodeNode(value)ifself。isempty():node。prevself。headerself。headernodeself。length1returnelse:node。nextself。headerself。header。prevnodeself。headernodeself。length12。尾插法defappend(self,value):nodeNode(value)ifself。isempty():self。add(value)else:curself。headerwhilecur。nextisnotNone:curcur。nextcur。nextnodenode。prevcurself。length13。向双链表的指定位置添加元素definsert(self,index,value):nodeNode(value)curself。headerifindex0orindexself。length:print(您输入的信息有误)returnifindex1:self。add(value)foriinrange(2,index):curcur。nextnode。nextcur。nextcur。next。prevnodecur。nextnodenode。prevcurself。length1returnvalue实现插寻双链表元素的功能有三种实现方式:1。根据索引查询元素2。直接查询元素3。遍历整个双链表,并打印出所有的元素1。根据索引查询元素defgetitem(self,index):curself。headerforiinrange(index1):curcur。nextreturncur。value2。直接查询元素,并返回该元素的索引defgetIndex(self,value):curself。headertemp0whilecur。nextisnotself。header:ifcur。valuevalue:returntemp1curcur。nexttemp13。遍历整个双链表,并打印出所有的元素defgetAll(self):ifself。isempty():print(目前双链表中没有元素!)returncurself。headerforiinrange(self。length):print(dcur。value,end)curcur。next4。查询某个元素的后继节点defgetItem(self,value):curself。headertemp0whilecur。nextisnotself。header:ifcur。valuevalue:ifcur。nextisnotNone:returncur。next。valueelse:return1curcur。nexttemp15。查询某个元素的前驱节点defgetPrevItem(self,value):curself。headertemp0whilecur。nextisnotself。header:ifcur。valuevalue:ifcur。previsnotNone:returncur。prev。valueelse:return1curcur。nexttemp1实现修改指定位置元素的功能defsetitem(self,index,value):curself。headerforiinrange(index1):curcur。nextcur。valuevaluereturnvalue实现删除双链表元素的功能直接删除元素defdelete(self,value):curself。headerifself。getIndex(value)1:self。headercur。nextself。length1elifself。getIndex(value)!1:whileself。getIndex(value)!self。length:curcur。nextcurNoneself。length1else:whilecur。value!value:curcur。nextcur。prev。nextcur。nextcur。next。prevcur。prevself。length1ifnamemain:sdoubleLink()s。add(12)s。add(13)s。add(14)s。add(15)s。append(22)s。getAll()print(第d个位置的元素是d。(1,s。getitem(1)))print(元素d在双链表的第d个位置(14,s。getIndex(14)))print(获取元素d的后继节点d(12,s。getItem(12)))print(获取元素d的前驱节点d(13,s。getPrevItem(13)))print(在第d个位置插入元素d:(2,s。insert(2,45)))s。getAll()print(将第d个位置的元素修改为d:(1,s。setitem(1,900)))s。getAll()print(删除第d个元素:5)s。delitem(5)print(删除元素22:)s。delete(22)s。getAll()