zoukankan      html  css  js  c++  java
  • 算法-02-双链表

    # 双向链表,每个结点都有两个指针域
    class Node(object):
    def __init__(self, item):
    self.elem = item
    self.next = None # 定义为指针
    self.prev = None # 定义头指针

    class DoubleLinkList(object):
    def __init__(self, node=None):
    self.__head = node

    def is_empty(self):
    return self.__head == None

    def length(self):
    count = 0
    cur = self.__head
    while cur != None:
    count += 1
    cur = cur.next
    return count
    def travel(self):
    cur = self.__head
    while cur != None:
    print(cur.elem)
    cur = cur.next
    def add(self, item):
    node = Node(item)
    node.next = self.__head
    self.__head.prev = node
    self.__head = node
    def append(self, item):
    node = Node(item)
    if self.is_empty():
    self.__head = node
    else:
    cur = self.__head
    while cur is not None:
    cur.next = node
    node.prev = cur
    def insert(self, pos, item):
    node = Node(item)
    if pos <= 0:
    self.add(item)
    elif pos >= self.length()-1:
    self.append(item)
    else:
    cur = self.__head
    count = 0
    while count != pos:
    count += 1
    cur = cur.next
    '''方法一:
    node.next = cur # 使新结点的尾指针指向插入位置的下一个结点
    node.prev = cur.prev # 使新结点的头指针指向插入位置的前一个结点,用这两步实现新结点与前后结点之间的链接,为后面拆开原有前后结点之间的关系做铺垫
    cur.prev.next = node # 使插入位置的前结点的尾指针指向新结点,从而拆开原有前后结点之间的链接
    cur.prev = node # 使插入位置的头指针指向新结点,实现新结点与原前后结点最后的链接'''
    #方法二:
    node.next = cur
    node.prev = cur.prev
    cur.prev = node
    cur.prev.next = node
    # 二者连接顺序都是:先使新结点node的头指针与尾指针,与想插入位置的前后结点构成连接,当连接好后再思考如何拆开原有两个结点之间的连接
    def remove(self, item):
    cur = self.__head
    while cur != None:
    if cur.elem == item:
    if cur == self.__head:
    self.__head = cur.next
    # 判断链表是否只有一个结点
    if cur.next:
    cur.next.prev = None
    break
    else:
    cur.prev.next = cur.next
    # 判断是否是在尾结点进行的删除,当cur.next存在时返回为真
    if cur.next:
    cur.next.prev = cur.prev
    break
    def search(self, item):
    cur = self.__head
    while cur != None:
    if cur.elem == item:
    return True
    else:
    cur = cur.next
    return False


  • 相关阅读:
    ARTS 计划第四周
    ARTS 计划第三周周
    计划表的科学设定
    C/C++内存分配
    ARTS 计划第二周周
    jsoncpp 和 libcurl的编译与使用 vs2010
    ARTS 计划第一周
    unix中的v节点和i节点
    百度地图demo
    带有定位当前位置的百度地图web api 前端代码
  • 原文地址:https://www.cnblogs.com/gongteng/p/13567484.html
Copyright © 2011-2022 走看看