版权声明:欢迎交流学习,转载请注明出处。 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