Python linkedlist及链表的反转

版权声明:欢迎交流学习,转载请注明出处。 https://blog.csdn.net/qq_23869697/article/details/90383932
# -*- coding: utf-8 -*-
# @Time    : 2019/5/20 20:41
# @Author  : shaocanfan
# @File    : reverse_linklist.py


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


class LinkList:
    def __init__(self):
        self.length = 0
        self.root = Node()
        self.tail = None

    def iter_node(self):
        cur = self.root.next
        while cur is not self.tail:
            yield cur
            cur = cur.next
        if cur is not None:
            yield cur

    def __iter__(self):
        for node in self.iter_node():
            yield node.data

    def __len__(self):
        return self.length

    def append(self, data):
        new_node = Node(data)
        if not self.length:
            self.root.next = new_node
            self.tail = new_node
            self.length += 1
            return
        tail_node = self.tail
        tail_node.next = new_node
        self.tail = new_node
        self.length += 1
        return

    def arr_to_linklist(self, arr):
        for x in arr:
            self.append(x)

    def reverse(self, ):
        if self.length == 0:
            raise Exception('trying to reverse a empty linked list.')
        if self.length == 1:
            return
        else:
            pre = self.root.next
            cur = pre.next
            nex = cur.next

            pre.next = None
            self.tail = pre
            while cur.next is not None:
                cur.next = pre
                pre = cur
                cur = nex
                nex = nex.next
            cur.next = pre
            self.root.next = cur


arr = [1, 2, 3, 4, 5, 6, 7]
ll = LinkList()
ll.arr_to_linklist(arr)
for x in ll:
    print(x)
ll.reverse()
for x in ll:
    print(x)

结果:

1
2
3
4
5
6
7
7
6
5
4
3
2
1

猜你喜欢

转载自blog.csdn.net/qq_23869697/article/details/90383932