双链表

#! /usr/bin/env python
# _*_ coding: utf-8 _*_


class Node(object):
    """Represnet a single linked node"""

    def __init__(self, data, next=None):
        """Instantiates a Node with a default next of Node"""
        self.data = data
        self.next = next

class TwoWayNode(Node):

    def __init__(self, data, prev = None, next = None):
        Node.__init__(self, data, next)
        self.prev = prev

# 双链表结构可以顺序打印节点,也可以反序打印节点。
# 除了尾部的插入和删除,双链表结构上的操作时间复杂度和单链表一样;但是,双链表结构中的额外指针,需要一个额外的
# 空间复杂度线性的存储。在32位系统中,一个指针是4字节,64位是8字节,对于追求时间复杂度优先级低于空间复杂度的应用,
# 单链表是更好的选择
if __name__ == "__main__":
    head = TwoWayNode(1)
    tail = head # 双链表的尾指针
    for data in range(2, 6):
        tail.next = TwoWayNode(data, tail) # 新节点指向tail;尾节点的next指针必须指向新的节点
        tail = tail.next # tail指针必须指向新的节点
        probe = tail

    """
    5
    4
    3
    2
    1
    """
    probe = tail
    while probe != None:
        print(probe.data)
        probe = probe.prev

    """
    1
    2
    3
    4
    5
    """
    probe = head
    while probe != None:
        print(probe.data)
        probe = probe.next

    # 插入
    """
    1
    2
    3
    4
    44
    5
    """
    index = 4
    newItem = 44
    probe = head
    while index > 1 and probe.next != None:
        print(probe.data)
        index -= 1
        probe = probe.next
    probe.next = Node(newItem, probe.next)

    probe = head
    while probe != None:
        print(probe.data)
        probe = probe.next

    # 删除
    """
    1
    2
    3
    4
    5
    """
    index = 4
    probe = head
    while index > 1 and probe.next.next != None:
        probe = probe.next
        index -= 1
    probe.next = probe.next.next

    probe = head
    while probe != None:
        print(probe.data)
        probe = probe.next

 

#! /usr/bin/env python
# _*_ coding: utf-8 _*_

class Node(object):

    def __init__(self, data, next = None):

        self.data = data
        self.next = next

class TwoWayNode(Node):

    def __init__(self, data, prev = None, next = None):
        Node.__init__(self, data, next)
        self.prev = prev

head = TwoWayNode(1) # head头指针
tail = head          # tail尾指针,最终会指向链表的尾部
for data in range(2, 6):
    tail.next = TwoWayNode(data, tail) #新节点的prev是tail;新节点是tail的next指针所指向的节点
    tail = tail.next # tail指针指向新的节点

"""
1
2
3
4
5
5
4
3
2
1
"""
probe = head
while probe != None:
    print(probe.data)
    probe = probe.next

probe = tail
while probe != None:
    print(probe.data)
    probe = probe.prev


"""
从尾向头定义双链表
5
4
3
2
1
"""
tail = TwoWayNode(1) #先定义尾节点
head = tail #从尾向头移动头节点
for data in range(2, 6):
    head.prev = TwoWayNode(data,None,head)
    head = head.prev

probe = head
while probe != None:
    print(probe.data)
    probe = probe.next

"""
1
2
3
4
5
"""
probe = tail
while probe != None:
    print(probe.data)
    probe = probe.prev

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值