链表

概念:

  • 区别于数组,链表中的元素不是存储在内存中连续的一片区域,链表中的数据存储在每一个称之为「结点」复合区域里,在每一个结点除了存储数据以外,还保存了到下一个结点的指针(Pointer)。

  • 由于不必按顺序存储,链表在插入数据的时候可以达到 O(1)O(1) 的复杂度,但是查找一个结点或者访问特定编号的结点则需要 O(n) 的时间。

应用

  • HashMap Node 节点,Node节点有自身的值和 next 指向:
//HashMap Node 部分源码
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next; Node(int hash, K key, V value, Node<K,V> next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
}
  • LinkedList Node 结点使用双链表
//LinkedList 部分源码
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev; Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

题目描述

解题思路

单链表的反转就是把链表的指向换一个方向,由从左往右变成从右变左。

主要解题思路是拆分每一个指针。

上图从 1 指向 2 变成 2 指向1,也就是需要设置 2 节点的next = 1,在做指向的改变之前要先将 2 节点的 next 存起来,然后改变 2 节点的next:

  • 创建一个空链表 node,用来存储反转的链表。
  • 存储链表的 next。
  • 链表的 next 指向 node。
  • 当前链表赋值给 node。
  • 循环遍历下一个节点

Java 解题代码:

class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
// 创建一个空链表
ListNode node= null;
while(cur != null) {
// 存储 next
ListNode next = cur.next;
// 当前链表指向指向新的链表
cur.next = node;
// 当前节点赋值给 node
node = cur;
// 遍历下一个节点
cur = next;
}
return pre; }
}

如果觉得文章对你有帮助的话,请点个推荐吧!

【leetcode 206】 反转链表(简单)的更多相关文章

  1. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  2. 每天一道面试题LeetCode 206 -- 反转链表

    LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...

  3. leetCode:206 反转链表

    206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...

  4. Java实现 LeetCode 206 反转链表

    206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...

  5. leetcode 206. 反转链表 及 92. 反转链表 II

    206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...

  6. LeetCode 206.反转链表(Python3)

    题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可 ...

  7. LeetCode 206——反转链表

    对单链表进行反转有迭代法和递归法两种. 1. 迭代法 迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,反转前两个结点,即让第二个结点指向第一个结点.然后依次往后移动指针,直到第二个结点为空 ...

  8. leetcode 206 反转链表 Reverse Linked List

    C++解法一:迭代法,使用前驱指针pre,当前指针cur,临时后继指针nxt: /** * Definition for singly-linked list. * struct ListNode { ...

  9. Leetcode春季打卡活动 第二题:206. 反转链表

    Leetcode春季打卡活动 第二题:206. 反转链表 206. 反转链表 Talk is cheap . Show me the code . /** * Definition for singl ...

  10. LeetCode 92. 反转链表 II(Reverse Linked List II)

    92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...

随机推荐

  1. Spark入门之idea编写Scala脚本

    一.安装Scala插件 1.File->Settings 2.Plugins->Msrketplace->搜索Scala并安装 (或者自己下载合适的scala版本,教程:自己给ide ...

  2. ubantu系统之快捷键使用

    1. 文件管理器中,目录切换为可以编辑的状态: ctrl + l 2. gedit 搜索 : ctrl + h

  3. Redis快速入门到精通

    Redis Redis是一个开源的使用ANSI C语言编写.支持网络. 可基于内存亦可持久化的日志型.Key-Value型 NoSQL数据库,并提供多种语言的API.从2010年3 月15日起,Red ...

  4. linux中查看端口号使用情况

    百度一圈,以下是整理来的操作命令. 1.netstat -anp |grep (端口号) 这个方法可以直观看到对应端口号是否被使用. 2.netstat -nultp 这个方法可以看到该机上所有以用的 ...

  5. Oracle数据库包括两个部分数据库和数据库实例

    olsnodes,这个命令用来显示集群点列表(grid即oracle rac的第三个安装包内的软件,可找到) //集群名称[grid@shdb02 ~]$ olsnodes -cshfpdb-clus ...

  6. java实现MD5文件加密

    package me.zhengjie.modules.logdump.util; import java.io.FileInputStream; import java.io.IOException ...

  7. java基础知识-序列化/反序列化-gson基础知识

    以下内容来之官网翻译,地址 1.Gson依赖 1.1.Gradle/Android dependencies { implementation 'com.google.code.gson:gson:2 ...

  8. DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索. 它是一种用来遍历或搜索树和图数据结构的算法 注:关于树的一些知识可以去看<树的概念及基本术语>这篇文章 ...

  9. 学习打卡——CentOS 7安装

    本来今天是要学习redis的,但是redis官方又不支持在win下运行,windows版本目前都是微软官方在维护.redis最新版都已经更新到7.0了,windows却还是只有3.x版本.所以随性就去 ...

  10. JavaScript学习①

    # 今日内容 1. JavaScript基础 ## JavaScript: * 概念: 一门客户端脚本语言 * 运行在客户端浏览器中的.每一个浏览器都有JavaScript的解析引擎 * 脚本语言:不 ...