python实现单链表反转

class Link:

    def __init__(self):
        self.n = 0
        self.fist_node = Node()
        super(Link, self).__init__()

    def isEmply(self):
        return self.n == 0

    def clear(self):
        self.n = 0
        self.fist_node = Node()

    def add(self, node):
        item = self.fist_node
        while item.next_addr:
            item = item.next_addr
        item.next_addr = node
        self.n += 1

    def addx(self, i, node):
        if i > self.n:
            return -1
        temp = self.fist_node
        for x in range(1, self.n + 1):
            if x == i:
                break
            temp = temp.next_addr

        node.next_addr = temp.next_addr
        temp.next_addr = node

    def get(self, i):
        if self.n == 0:
            return -1
        temp = self.fist_node.next_addr
        for x in range(1, self.n + 1):
            if x == i:
                break
            temp = temp.next_addr
        return temp.value

    def delete(self, i):
        if i > self.n or i <= 0:
            return -1
        temp = self.fist_node
        for x in range(1, self.n + 1):
            if x == i:
                break
            temp = temp.next_addr
        temp.next_addr = temp.next_addr.next_addr
        self.n -= 1

    def reverse(self):
        Link.node_reverse(self, self.fist_node.next_addr)

    def node_reverse(self, node):
        if node.next_addr:
            item = Link.node_reverse(self, node.next_addr)
            item.next_addr = node
            node.next_addr = None
            return node

        else:
            self.fist_node.next_addr = node
            return node


class Node:
    def __init__(self, pre=None, value=None, next_addr=None):
        self._pre = pre
        self._value = value
        self._next_addr = next_addr

    @property
    def pre(self):
        return self._pre

    @pre.setter
    def pre(self, addr):
        self._pre = addr

    @property
    def next_addr(self):
        return self._next_addr

    @next_addr.setter
    def next_addr(self, addr):
        self._next_addr = addr

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, value):
        self._value = value


if __name__ == '__main__':

    link = Link()
    node = Node(value='11')
    node1 = Node(value='12')
    node2 = Node(value='13')
    node3 = Node(value='13')

    link.add(node)
    link.add(node1)
    link.add(node2)
    link.add(node3)

    print(link.get(1))
    print(link.get(2))
    print(link.get(3))
    print(link.get(4))

    link.reverse()
    print(link.get(1))
    print(link.get(2))
    print(link.get(3))
    print(link.get(4))


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值