python数据结构学习笔记-2016-11-07-02-环形链表

来源:互联网 发布:实惠猪软件多少钱 编辑:程序博客网 时间:2024/06/05 11:29

        9.2 环形链表

        环形链表(circlar linked list)将所有结点组织成环形。与单链表不同的是,最后一个结点的next指针指向首元结点。(首元结点的prev指针指向最后一个结点。)


         通常情况下,可以使用一个外部指针指向最后一个结点,方便向前遍历或者向后遍历。



# 遍历def traverse(listRef):    curNode = listRef # curNode设定为最后一个结点    done = listRef is None: # 循环条件    while not done:        curNode = curNode.next        print curNode.data        done = curNode is listRef

        搜索

        搜索需要遍历,注意遍历可能提前结束,因此循环条件要修改。

# 搜索,假定链表def searchCircularList(listRef, target):    curNode = listRef    done = listRef is None    while not done:        curNode = curNode.next        if curNode.data == target:            return True        else:            done = curNode is listRef or curNode.data > target # 注意循环条件    return False


         添加结点

         添加结点分四种情况:

  • 空链表;
  • 在第一个结点前插入,即listRef指向的结点的下一个结点处插入;
  • 在最后一个结点插入,即在listRef指向的结点处插入;
  • 在中间插入。


# 添加结点def insert(listRef, value):    newnode = ListNode(value)    if listRef is None: # 空链表        listRef = newnode    elif value < listRef.next.data: # 在表头插入        newnode.next = listRef.next        listRef.next = newnode    elif value > listRef.data: # 在表尾插入        newnode.next = listRef.next        listRef.next = newnode        listRef = newnode    else:        predNode = None        curNode = listRef        done = listRef is None        while not done:            predNode = curNode            predNode = curNode.next            done = curNode is listRef or curNode.data > target        newnode.next = curNode        predNode.next = newnode

          删除元素

0 0
原创粉丝点击