Python实现单链表中元素的反转

yizhihongxing

下面是Python实现单链表中元素反转的攻略。

1. 创建单链表

首先,我们需要定义单链表的结构。单链表可以通过定义一个节点类来实现,该类至少包含两个属性,一个是存储数据的值,一个是指向下一个节点的指针。具体实现如下:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

接下来,我们定义一个函数来创建单链表。该函数需要从列表中读取数据并将其存储到链表中。下面是函数的具体实现:

def createLinkedList(data):
    if len(data) == 0:
        return None
    head = ListNode(data[0])
    node = head
    for i in range(1, len(data)):
        node.next = ListNode(data[i])
        node = node.next
    return head

2. 反转链表

接下来,我们需要实现链表反转的函数。这个函数的具体实现可以分为三个步骤:

  1. 初始化三个指针pre、cur、nxt。初始化pre指针为None,cur指针为链表头节点,nxt指针为链表头节点的下一个节点。
  2. 将cur的next指针指向pre。
  3. 将pre、cur、nxt三个指针分别向右移动一个节点,即令pre=cur,cur=nxt,nxt=nxt.next。如果nxt非空,返回第二步;否则,返回pre。

下面是反转链表函数的具体实现:

def reverseLinkedList(head):
    pre = None
    cur = head
    nxt = head.next
    while nxt != None:
        cur.next = pre
        pre = cur
        cur = nxt
        nxt = nxt.next
    cur.next = pre
    return cur

3. 测试代码

接下来,我们来测试一下我们的代码是否能够正确反转链表。下面是两个测试用例:

# Test case 1
data = [1, 2, 3, 4, 5]
head = createLinkedList(data)
print("Original linked list:", head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val)
head = reverseLinkedList(head)
print("Reversed linked list:", head.val, head.next.val, head.next.next.val, head.next.next.next.val, head.next.next.next.next.val)

# Test case 2
data = [3, 2, 1]
head = createLinkedList(data)
print("Original linked list:", head.val, head.next.val, head.next.next.val)
head = reverseLinkedList(head)
print("Reversed linked list:", head.val, head.next.val, head.next.next.val)

输出结果:

Original linked list: 1 2 3 4 5
Reversed linked list: 5 4 3 2 1
Original linked list: 3 2 1
Reversed linked list: 1 2 3

可以看到,我们的代码成功地将链表进行了反转,并输出了正确的结果。

希望这个攻略能够帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现单链表中元素的反转 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • centos7安装显卡驱动方法

    以下是关于“CentOS 7安装显卡驱动方法”的完整攻略: 步骤1:检查显卡型号 首先,需要检查显卡型号。可以使用以下命令来检查显卡型号: lspci | grep -E "VGA|3D" 在上面的代码中,我们使用了lspci命令来列出PCI设备,并使用grep命令来过滤出显卡设备。 步骤2:下载显卡驱动 接下来,下载显卡驱动。可以从显卡…

    other 2023年5月7日
    00
  • 怎样安装javadb

    安装 JavaDB 可以分为以下两个步骤:下载与配置。 下载 JavaDB JavaDB 也被称为 Apache Derby,可以从 Apache Derby 的官方网站下载:https://db.apache.org/derby/derby_downloads.html 根据你的操作系统下载对应的二进制压缩包,例如 Windows 系统可以下载 db-de…

    其他 2023年4月16日
    00
  • 故事讲解Activity生命周期(猫的一生)

    故事讲解Activity生命周期(猫的一生)是一种有趣且易于理解的方式,用于说明Android应用程序中Activity的生命周期,以下是完整攻略: 1. 故事简介 一只小猫出生了,它刚开始很活跃,充满了活力。它会玩耍、会吃饭、会跳舞,这个过程就相当于Activity的生命周期。当小猫被主人带到其他场合时,它需要适应不同的环境,这个时候就相当于Activit…

    other 2023年6月27日
    00
  • Win7系统关机时提示Dwwin.exe初始化失败的解决方法

    Win7系统关机时提示Dwwin.exe初始化失败的解决方法 在关机时,如果Win7系统提示Dwwin.exe初始化失败,可能会让用户感到困扰。出现这种问题的原因可能有很多,可以尝试以下方法解决。 方法一:禁止Dr. Watson错误报告服务 Dr. Watson错误报告服务(Dwwin.exe)是一个Windows系统组件,用于生成错误报告。如果该服务出现…

    other 2023年6月20日
    00
  • iphone手机搜狗输入法快速打字小技巧

    iPhone手机搜狗输入法快速打字小技巧攻略 1. 使用滑动输入法 搜狗输入法在iPhone上提供了滑动输入的功能,可以大大提高打字速度。以下是使用滑动输入法的步骤: 在搜狗输入法中打开滑动输入功能。 在键盘上滑动手指,从一个字母滑到另一个字母,形成一个连续的轨迹。 搜狗输入法会根据轨迹自动识别出你想要输入的单词。 示例说明: 假设你想输入单词\”Hello…

    other 2023年8月19日
    00
  • MyBatis别名和settings设置方式

    MyBatis别名和settings设置方式攻略 1. 别名(Alias)的设置方式 在MyBatis中,可以使用别名来代替完整的类名。这样可以简化代码并提高代码的可读性。下面是设置别名的几种方式: 1.1. 使用typeAliases标签配置别名 使用typeAliases标签在MyBatis的配置文件(mybatis-config.xml)中定义别名。示…

    other 2023年6月28日
    00
  • bigdecimal创建初始化值类型对比

    Bigdecimal创建初始化值类型对比 简介 BigDecimal 是 Java 中一个用于精确计算的类,对于一些对计算精度要求比较高的场合,例如金(融)业务计算,非常有用。在 BigDecimal 类中,可以使用字符串、double、int 等多种类型来初始化一个 BigDecimal 对象,性能和精度也不同。本文将对比不同的初始化方式带来的性能和精度影…

    其他 2023年3月28日
    00
  • 让电脑关机时自动清理虚拟内存页面文件的方法

    让电脑关机时自动清理虚拟内存页面文件的方法攻略 在Windows操作系统中,可以通过以下步骤让电脑在关机时自动清理虚拟内存页面文件: 打开“开始”菜单,点击“运行”(或按下Win + R键),输入“regedit”并按下回车键,打开注册表编辑器。 在注册表编辑器中,导航到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro…

    other 2023年8月1日
    00
合作推广
合作推广
分享本页
返回顶部