1、对一个单链表进行逆序操作。
逆序之前为 head-->A-->B-->C-->None
逆序之后为 head-->C-->B-->A-->None
2、实现
定义节点类
class LNode(object):
def __init__(self, elem, _next):
self.elem = elem
self.next = _next
单链表类
class LinkList(object):
def __init__(self):
self.head = None
# 头插法创建单链表
def prepend(self, elem):
self.head = LNode(elem, self.head)
# 尾插法创建单聊表
def append(self, elem):
# 先判断单链表是否为空
if self.head is None:
self.head = LNode(elem, None)
return
p = self.head
# 需要将指针移动到链表的表尾
while p.next is not None:
p = p.next
p.next = LNode(elem, None)
return
def reverse_list(self):
if self.head is None:
return
p = self.head
current = self.head.next
p.next = None
# 引入第三个指针来逆序链表
while current is not None:
temp = current.next
current.next = p
p = current
current = temp
self.head = p # 最后记得将头指针指向当前头结点的位置
def printall(self):
p = self.head
while p:
print p.elem
p = p.next
if __name__ == '__main__':
single_list = LinkList()
for i in range(6):
single_list.append(i)
single_list.printall()
"""
0
1
2
3
4
5
"""
single_list.reverse_list()
single_list.printall()
"""
5
4
3
2
1
0
"""