Leetcode206-reverseList翻转链表

Leetcode206-reverseList翻转链表

还是得多写博客才能让自己保持思考啊,不然都懒下去了

题目

题目链接
题目加上图片,含义显而易见:

截图来自Leetcode

思路

从前到后遍历链表,每次改变一个箭头的指向
1.最基本的操作是交换两个节点,这是循环体的主要功能
2.要保证能够把所有节点都进行两两交换,就必须保证后面的第三个节点还能被访问到,且能够正常结束,这是循环体的外围保障

复杂度

时间复杂度,从前到后遍历一次即完成操作,因此为 O ( n ) O(n) O(n)
空间复杂度,没有新建链表,只是改变原节点的指向, O ( n ) O(n) O(n)

代码

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


class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        # 单节点
        if not head or not head.next:
            return head
        # 至少有两个节点
        prev = head
        node = head.next
        head.next = None  # head最终是尾节点,因此next为None
        
        while node.next is not None:
            tmp = node.next
            # 反转指向
            node.next = prev
            # 指针前进
            prev = node
            node = tmp
        # 循环跳出后,node是尾节点,prev是已经反转好的链表的头节点
        node.next = prev
            
        return node
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值