自适应网站三套代码,网站负责人查询,百度云账号登录,电商代理双链表简单讲解
双向链表#xff08;doubly linked list#xff09;是一种链式数据结构#xff0c;它的每个节点包含两个指针#xff0c;一个指向前一个节点#xff0c;一个指向后一个节点。与单向链表相比#xff0c;双向链表可以在任何位置进行插入和删除操作#xf…双链表简单讲解
双向链表doubly linked list是一种链式数据结构它的每个节点包含两个指针一个指向前一个节点一个指向后一个节点。与单向链表相比双向链表可以在任何位置进行插入和删除操作因为每个节点都可以通过前向或后向指针访问其前驱和后继。 图例说明 这里讲解一个双链表节点添加的例子我们看到101520这三个点的位置其中原本是10和20相互连接首先我们要先将15的next指向20因为如果我们现将10的next指向15的话那20的地址就会消失这要就会导致我们的数据丢失所以要先连接15和20然后就是把20的prior(前驱)指向15最后再是15的prior(前驱)指向10,10的next指向15这样我们就完成插入的程序了。
代码实现
class Node(object):创建一个双链表def __init__(self, item):self.item itemself.next Noneself.prior Noneclass FunctionLink(object):def __init__(self):self.linklength 1self.head None # 首先初始化让头结点指向空def creatLinkListHead(self, li):头插法:return:head Node(li[0])for element in li[1:]:self.linklength 1node Node(element) # 创建一个节点node.next headhead.prior nodehead nodereturn headdef creatLinkListTail(self, li):此方法为尾插法:param li::return:head Node(li[0])for element in li[1:]:self.linklength 1node Node(element)head.next nodenode.prior headreturn headdef printLinkList(self, lk):此方法为打印链表中的数字:param lk:传入头结点的地址:return:while lk:if not lk.next:print(lk.item)lk lk.nextelse:print(lk.item, end,)lk lk.nextdef inserLinkList(self, index, element, curNode):此方法为插入数据:param index:输入要传入数据的位置索引值:param element: 输入要传入的数据:param curNode: 输入你的头链表位置:return:head curNode # 现将链表的头链表进行存储number 1if index self.linklength:raise Exception(对不起您输入的索引值超过了链表的长度)else:while True:if index number:p Node(element) # 创建节点p.next curNode.nextcurNode.next.prior pp.prior curNodecurNode.next pself.linklength 1curNode headbreakelse:curNode curNode.nextnumber 1def deleteLinkList(self, index, curNode):删除输入的索引值后面的结点:param index: 要删除的索引位置:param curNode: 头结点地址:return:head curNode # 先将头指针的地址赋值给一个临时节点number 1if index self.linklength:raise Exception(对不起您输入的索引位置超过了链表的长度请重新输入)else:while True:if number index:p curNode.nextcurNode.next p.nextp.next.prior curNodeself.linklength - 1curNode headbreakelse:curNode curNode.nextnumber 1if __name__ __main__:func FunctionLink()doublelk func.creatLinkListHead([1, 2, 3, 4])func.printLinkList(doublelk)func.inserLinkList(2, 10, doublelk)func.printLinkList(doublelk)func.deleteLinkList(2, doublelk)func.printLinkList(doublelk)结果展示