首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【leetcode 206】 反转链表(简单)

【leetcode 206】 反转链表(简单)

作者头像
用户10384376
发布2023-02-26 12:43:05
发布2023-02-26 12:43:05
2060
举报
文章被收录于专栏:码出code码出code

链表

概念:

  • 区别于数组,链表中的元素不是存储在内存中连续的一片区域,链表中的数据存储在每一个称之为「结点」复合区域里,在每一个结点除了存储数据以外,还保存了到下一个结点的指针(Pointer)。
  • 由于不必按顺序存储,链表在插入数据的时候可以达到 O(1)O(1) 的复杂度,但是查找一个结点或者访问特定编号的结点则需要 O(n) 的时间。

Java 中的应用

HashMap Node 节点,Node节点有自身的值和 next 指向:

代码语言:javascript
复制
//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 结点使用双链表

代码语言:javascript
复制
//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 解题代码:

代码语言:javascript
复制
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;

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出code 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链表
  • Java 中的应用
  • 题目描述
  • 解题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档