剑指offer_面试题24 : 反转链表( python实现 )

反转链表( 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值