【五分钟力扣】206. 用python3实现链表反转

文章目录

    • 一、前言
    • 二、题目
    • 三、单链表的相关知识
    • 四、学习参考视频
    • 五、解答方法

一、前言

最近在刷力扣上的题目,之前也刷过很多次,一边刷一边忘,很是苦恼。

为什么边学边忘,很大程度是没有应用场景,只是被动的进行填鸭式学习。

为了提高学习效率,觉得还是得坚持写博客,一方面强化记忆,第二强迫自己创造应用场景,学习知识的同时也在产生知识。

【五分钟力扣】206. 用python3实现链表反转_第1张图片

二、题目

【五分钟力扣】206. 用python3实现链表反转_第2张图片
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list/

三、单链表的相关知识

【五分钟力扣】206. 用python3实现链表反转_第3张图片
参考我的其他博文: 【python链表】之单向链表详解

四、学习参考视频

一分钟教你链表反转

五、解答方法

"""
反转一个单链表。


输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

"""
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x, next=None):
        self.val = x
        self.next = next

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head

        last = None  # 前置节点
        while head:
            tmp = head.next  # 保存当前节点的下一个节点,不可缺,因为后面更改了当前节点的next指向
            head.next = last  # 更改当前节点的next为上一个节点
            last = head  # 将上一个节点移动到当前节点
            head = tmp  # 当前节点移动到下一个节点
            # head.next, last, head = last, head, head.next  ,简写样式,提高运行速度
        return last


if __name__ == '__main__':
    # 创建一个1-5的链表
    a = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5,)))))
    obj = Solution()
    Node = obj.reverseList(a)
    while Node:
        print(Node.val)
        Node = Node.next

你可能感兴趣的:(金鞍少年的刷题之路)