前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JZ24 反转链表

JZ24 反转链表

原创
作者头像
用户9955628
发布2022-08-28 12:45:49
2080
发布2022-08-28 12:45:49
举报
文章被收录于专栏:python3基础算法

描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0\leq n\leq10000≤n≤1000

要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

示例1

输入:

代码语言:javascript
复制
{1,2,3}

复制

返回值:

代码语言:javascript
复制
{3,2,1}

复制

示例2

输入:

代码语言:javascript
复制
{}

复制

返回值:

代码语言:javascript
复制
{}

复制

说明:

代码语言:javascript
复制
空链表则输出空                  

思路及代码:

代码语言:javascript
复制
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @return ListNode类
#
class Solution:
    def ReverseList(self , head: ListNode) -> ListNode:
        # write code here
        #head链表头部指针,x是存放数据的变量,链表的最后一个指针为null
        #假设链表1->2->3->4->null
        #目标链表:4->3->2->1->null
        #设定待反转链表的尾脂针为pre=None
        #head 是动态表头,指向下一次链表的值
        #temp =head.next 第一次迭代head为1,temp为2,原来链表1->2
        #反转后 ,令head.next=pre 实现1->None
        #但是链表此时切断了,变为1->none,2->3->4
        #移动指针,令pre=head,pre从none变为1,下一次迭代可以完成2->1的链接
        #此外,令head=next 把指针移动到后面仍然链接的链表上
        #下一次迭代 把2->3 转变为2->1->none
        #最后一次迭代,head变为none,pre变为4,pre是最新的表头,完成
        pre = None
        while head:
            temp = head.next
            head.next = pre
            pre = head
            head = temp
        return pre
        

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述
  • 示例1
  • 示例2
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档