【python数据结构与算法】LeetCode:反转链表

题目链接:https://leetcode-cn.com/problems/reverse-linked-list/

介绍一下反转链表的思路:

首先,先明确一下输入:输入为一个链表的头结点head

具体步骤:

  1. 先判断头结点或头结点的next属性head.next 是否为None。若是,直接返回该头结点,说明该链表为空或者长度为1,没有反转必要;
  2. 申请两个变量:
    1. last变量:初始为None,记录当前操作的节点的前一个节点(也就是反转后的链表的last(下一个)节点)
    2. tmp变量:初始为None,记录当前节点的next节点(也就是翻转后的链表的前面一个节点)
  3. 使用while循环,判断当前节点(即head)是否为空;
  4. 若为空,先将当前的head节点的next属性用tmp变量记录,然后再将last记录的上一个节点赋值给head.next。这一操作就是将当前节点的next指针指向上一个节点last,这也是反转链表的核心;与此同时防止原来head.next指针指向的下一个节点丢失,所以用tmp暂时记录一下
  5. 然后,再将当前节点head赋值给last,将刚刚tmp记录的现节点的next节点赋值给head,即last(前一个节点)和head(当前节点)均向前走一步
  6. 最终,当当前节点head为空的时候,返回其上一个节点,这就是新的反转过的链表的头结点。

上代码:

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

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head is None or head.next is None:
            return head
        last,tmp = None,None
        while head:
            tmp = head.next
            head.next = last
            last = head
            head = tmp
        return last

猜你喜欢

转载自blog.csdn.net/weixin_41712499/article/details/85298077