python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表

        6.4.1 带尾指针的链表

        在单链表的末尾,加上一个指针用于指向链表的最后一个结点。

        追插元素(append)

        在链表的最后一个结点,增加新的结点,如果使用尾指针的话,较为便利。只需将尾指针指向新结点,并将原来最后一个结点指向新结点即可。

def append(head, tail, item):
    newNode = ListNode(item)
    if head is None:
        head = newNode # 头指针指向新节点
    else:
        tail.next = newNode 
    tail = newNode # 尾指针指向新节点

        删除元素

        删除元素相比之前,就需要多考虑一种情况,那就是要删除的元素是最后一个结点时,就需要额外将尾指针指向原来最后一个结点的上一个结点。

def remove(head, tail, target):
    predNode = None
    curNode = head
    while curNode is not None and curNode.data != target:
        predNode = curNode
        curNode = curNode.next
    if curNode is not None:
        if curNode is head:
            head = curNode.next
        else:
            predNode.next = curNode.next
        if curNode is tail: # 必须要考虑删除的节点有可能就是尾指针指向的节点
            tail = predNode


        6.4.2 排序链表

        链表可以按照结点的数值大小排列起来。

        线性搜索

        线性搜索可以利用排序的优势,进行线性搜索,遇到比目标数值大的结点时,会提前退出循环。

def sortedSearch(head, target):
    curNode = head
    while curNode is not None and curNode.data < target: # 遇到节点的数值比目标还要大,则直接退出循环
        if curNode.data == target:
            return True
        else:
            curNode = curNode.next
    return False
        插入结点

        同样利用线性搜索先找到插入位置,再插入结点。

# 插入结点
def insert(head, value):
    predNode = None
    curNode = head
    while curNode is not None and curNode.data < value:
        predNode = curNode
        curNode = curNode.next
    # 此时curNode指向的正是新值要插入的位置
    newNode = ListNode(value)
    newNode.next = curNode 
    if curNode is head:
        head = newNode
    else:
        predNode.next = newNode


        

        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值