「leetcode 206」 反转链表(简单)

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

大家好,欢迎来到IT知识分享网。

链表

概念:

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

  • 由于不必按顺序存储,链表在插入数据的时候可以达到 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; } } 

题目描述

「leetcode 206」 反转链表(简单)

解题思路

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

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

「leetcode 206」 反转链表(简单)

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

「leetcode 206」 反转链表(简单)

  • 创建一个空链表 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; } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/163935.html

(0)
上一篇 2025-01-09 22:05
下一篇 2025-01-09 22:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信