继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

LeetCode 反转链表

大梦三千秋
关注TA
已关注
手记 173
粉丝 7
获赞 168

反转链表


题目


反转一个单链表。

示例:

输入: 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

实现效果


图 1


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


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP