大家好,欢迎来到IT知识分享网。
链表
概念:
- 区别于数组,链表中的元素不是存储在内存中连续的一片区域,链表中的数据存储在每一个称之为「结点」复合区域里,在每一个结点除了存储数据以外,还保存了到下一个结点的指针(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; } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/163935.html