双向链表

# 创建节点类

class Node():

        def __init__(self, item):

                self.item = item

                # prev指向前一个节点的标识

                self.prev =None

                # next指向后一个节点的标识

                self.next =None

# 双向链表

class DoubbleLinkList():

        def __init__(self):

                self.head =None

       def is_empty(self):

       """判断链表是否为空"""

               return self.headis None

        def length(self):

        """链表长度"""

                cur =self.head

                count =0

                while cur !=None:

                        count +=1

                        cur = cur.next

                return count

        def travel(self):

        """遍历整个链表"""

                cur =self.head

                while cur !=None:

                        print(cur.item, end=" ")

                        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

                        node.prev = cur

        def insert(self, pos, item):

        """在链表指定位置上插入元素"""

                node = Node(item)

                if pos <=0:

                        self.add(item)

                elif pos >self.length():

                        self.append(item)

                else:

                        cur =self.head

                        count =0

                        while count < pos-1:

                                count +=1

                                cur = cur.next

                        node.next = cur.next

                        node.prev = cur

                        cur.next = node

        def remove(self, item):

        """删除链表元素"""

                if self.is_empty():

                        return

                cur =self.head

                if cur.item == item:

                        if cur.next !=None:

                                self.head = cur.next

                                cur.next.prev =None

                        else:

                                self.head =None

                else:

                        while cur.next !=None:

                                if cur.item == item:

                                        cur.prev.next = cur.next

                                        cur.next.prev = cur.prev

                                        return

                                cur = cur.next

                        if cur.item == item:

                                cur.prev.next =None

                        else:

                                return

        def search(self, item):

        """查找链表元素"""

                cur =self.head

                while cur !=None:

                        if cur.item == item:

                                return True

                        cur = cur.next

                return False


if __name__ =='__main__':

d = DoubbleLinkList()

print(d.remove(10))

print(d.search(10))

print(d.length())

d.add(20)

d.add(10)

d.append(30)

d.append(40)

d.insert(0, 50)

d.insert(5, 60)

d.remove(50)

d.remove(30)

d.remove(60)

print(d.search(60))

print(d.search(10))

print(d.search(40))

print(d.remove(60))

print(d.length())

d.travel()


运行结果:

    

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 双链表的每个节点都有两个指针,一个指向直接后继,一个指向直接前驱。在双向链表的任意一个节点都能很方便的访问其前后节...
    于饼喵阅读 5,716评论 0 1
  • # 创建节点类 class Node(): # 定义构造方法 def __init__(self, item)...
    看你的第一眼阅读 1,612评论 0 0
  • class Node(object): def __init__(self, value): # 元素...
    猎人1987阅读 2,707评论 0 0
  • 数据结构与算法--双向链表 单向链表的指向是单向的,当前结点只指向它的后一个结点。同样,遍历的时候也只有一个顺序。...
    sunhaiyu阅读 2,649评论 0 0
  • 简介 双向链表也叫双面链表,它的每个节点由三部分组成:prev 指针指向前置节点,此节点的数据和 next 指针指...
    Padingpading阅读 4,164评论 0 0

友情链接更多精彩内容