反转链表( python实现 )
一、题目描述
题目:反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
二、解题思路
暂略。(此处主要作为书中python实现补充)
三、代码实现
这里的链表是单向链表,为程序更直观的展示出来,首先我们先定义一个节点类,如下。
class LinkedListNode():
def __init__ (self, value = None, next = None):
self.value = value
self.next = next
接下来,定义一个单向链表类(若是对单向链表操作较为熟悉,可暂时忽略,跳过此部分不影响后续程序理解),包括需要使用到的类函数,更多关于单向链表的操作可见:单向链表的创建及基本操作。
# 单链表类
class SingleLinkedList():
# 初始化
def __init__ (self):
self.head = None
# 判断链表是否为空
def is_empty(self):
if self.head is None:
return True
# 增加一个新的结点
def append(self,new_value):
node = LinkedListNode(new_value)
if self.is_empty():
self.head = node
else:
node.next = self.head
self.head = node
# 遍历整个链表,并将其值存在一个列表中
def travel(self):
cur = self.head
ls = []
while cur is not None:
ls.append(cur.value)
cur =cur.next
return ls
# 自行设置遍历头节点,遍历链表,并将其值存在一个列表中
def travelSetHead(self,pHead):
cur = pHead
ls = []
while cur is not None and cur.value is not None:
ls.append(cur.value)
cur =cur.next
return ls
此篇博客的主要部分:Python实现题目所要求的程序如下。
def reverseLinkedList(pHead):
nullP = LinkedListNode()
if pHead is None:
return nullP
pNode = pHead
pPrev = LinkedListNode()
while pNode is not None:
pNext = pNode.next
if pNext is None:
pReversedHead = pNode
pNode.next = pPrev
pPrev = pNode
pNode = pNext
return pReversedHead
实例化一个链表,并进行一系列添加链表节点的操作,如下。
>>> SLL = SingleLinkedList()
>>> for i in range(9):
SLL.append(i)
>>> print(SLL.travel())
Out:
[8, 7, 6, 5, 4, 3, 2, 1, 0]
对以上定义好的链表进行反转操作,如下。
>>> pReversedHead = reverseLinkedList(SLL.head)
>>> print(SLL.travelSetHead(pReversedHead))
Out:
[0, 1, 2, 3, 4, 5, 6, 7, 8]
考虑程序实现的鲁棒性问题,若是输入一个空的头节点,那么返回的也应该是一个None。
>>> SLL = SingleLinkedList()
>>> pReversedHead = reverseLinkedList(SLL.head)
>>> print(SLL.travelSetHead(pReversedHead))
Out:
[]
若是输入的链表只有一个节点,如下。
>>> SLL = SingleLinkedList()
>>> SLL.append(5)
>>> pReversedHead = reverseLinkedList(SLL.head)
>>> print(SLL.travelSetHead(pReversedHead))
Out:
[5]