手记

LeetCode 反转链表

反转链表


题目


反转一个单链表。

示例:

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

解题思路


  1. 迭代。利用双指针;
  2. 定义两个指针,一个 pre 指向 None,一个 cur 指向链表头部;
  3. 遍历链表,将当前节点的 next 指针指向 pre,同时 precur 指针都往前进一位(这里注意元素保存)
  4. cur 为None,迭代完毕,pre 此时指向链表头部,返回。

代码实现


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

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        '''反转链表

        Args:
            head: 链表
        
        Returns:
            返回反转后的链表
        '''
        # 定义两个指针
        # pre 指向 None,cur 指向原链表头部
        pre = None
        cur = head
        # cur 为 None,迭代结束
        while cur:
            # 这里注意引用更改,节点的存储
            # 下面的代码相当于
            # 存储节点值
            # tmp = cur.next
            # 将 cur 的 next 指向 pre
            # cur.next = pre
            # 移动两个指针
            # pre = cur
            # cur = tmp
            cur.next, pre, cur = pre, cur, cur.next
        # 返回反转后的链表
        return pre

实现效果



以上就是 LeetCode 题目《反转链表》的解题过程及结果。


1人推荐
随时随地看视频
慕课网APP