206.反转链表
时间:2019-08-24
本文章向大家介绍206.反转链表,主要包括206.反转链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<语法及技巧><完全没思路> <抽象能力><知识短板> <...> (标签)
题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
我的思路 1 - (不推荐)
1.构造了一个新链表,开辟了新的数组,空间复杂度增加了。。。
2.链表遍历一次,数组遍历一次。。用了O(2n)的时间复杂度。。。
''' 我的思路: 1.遍历链表,把结果存到数组 2.构造新链表,链表的值是反转的数组的值 ''' class Solution(object): def reverseList(self, head): newNode = newHead = ListNode(0) node=head nodeList=[] if not head: return head while node: nodeList.append(node.val) node=node.next for x in range(len(nodeList)-1): newNode.val=nodeList.pop() newNode.next = ListNode(0) newNode = newNode.next newNode.val = nodeList.pop() return newHead
我的思路 2 - (实现细节有问题)
class Solution(object): def reverseList(self, head): if not head:return head #让node从第二个节点开始 node = head.next #前节点指向head(错误) #想要实现node->1,即node指向前节点的1 #事实上指向了head这条链表。。。 pNode = head #(错误!!!!正确应该是pNode = None,当然前一句代码也要修改) ''' 核心代码 1.node保持当前节点的移动 2.pNode代表node的前一个节点 3.bNode代表node的后一个节点 遍历到倒数第二个节点的时候退出,此时node处于节点末尾, 再手动把末尾节点和之前的节点连接起来 关注点分散成了当前节点和下一个节点,使代码变复杂了。。 如果只关注当前节点,node会指向None。 那么返回它前一个节点不就好了么????? ---> pNode ''' while node and node.next: bNode = node.next node.next = pNode print(node.val) pNode = node node = bNode node.next = pNode return node
题解 1 - 迭代
class Solution(object): def reverseList(self, head): if not head:return head node = head pNode = None while node: bNode = node.next node.next = pNode pNode = node node = bNode return pNode
总结
原文地址:https://www.cnblogs.com/remly/p/11406425.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 查看磁盘IO并找出占用IO读写很高的进程
- Linux tcpdump 命令详解与示例
- 手动搭建Hadoop分布式集群
- Ansible-安装配置
- React-Redux 100行代码简易版探究原理。
- Ansible-免密登录与主机清单Inventory
- 安装Ambari和HDP
- React中引入Vue3的@vue/reactivity 实现响应式状态管理
- Ansible Ad-Hoc与常用模块
- Ansible Playbook 初识
- Ansible Playbook 变量与 register 详解
- 初探 Spark ML 第一部分
- Ansible Facts 变量详解 添加用户账号Ansible 配置清单Inventory
- Ansible playbook 编程
- 前端工程师自检清单73答