链表

LeetCode:Odd Even Linked List

大憨熊 提交于 2020-03-25 20:49:30
3 月,跳不动了?>>> 1、题目名称 Odd Even Linked List(链表内元素按奇偶位置重新排序) 2、题目地址 https://leetcode.com/problems/odd-even-linked-list/ 3、题目内容 英文: Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity. Example: Given 1->2->3->4->5->NULL , return 1->3->5->2->4->NULL . 中文: 给出一个链表,将所有奇数位置的节点和偶数位置的节点都归拢到一起,将偶数位置的节点放在所有奇数位置节点的后面。例如,给出链表1->2->3->4->5->NULL,应返回链表1->3->5->2->4->NULL。注意 4、解题方法

leecode--单链表移除链表元素,奇偶链表

六月ゝ 毕业季﹏ 提交于 2020-03-25 20:42:28
3 月,跳不动了?>>> 移除链表元素 删除链表中等于给定值val的所有节点 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 此问题想着很简单,删除元素必须用到两个节点,一个节点cur用于遍历链表,另一个节点pre表示当前节点的前一个节点。但是还需要注意以下问题: 1)如果需要删除的是链表的头节点该如何处理? 2)如果需要删除的节点是链表中的所有节点如何处理? 3)pre节点和cur节点如何遍历? 一个链表的初始情况: 需要删除的节点是 2 ,第二步节点情况应该是 可以看出上述情况下,pre节点不用移动,而cur节点移向next即可 如果删除的节点是 3 ,第二步的节点情况应该是 此种情况下,pre节点只想cur,而cur指向本身的next 上述三种情况都处理完成后,则可以轻松写出如下代码。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements(ListNode head, int val) { if (null ==

面试刷题9:HashTable HashMap TreeMap的区别?

霸气de小男生 提交于 2020-03-25 17:23:25
map是广义集合的一部分。 我是李福春,我在准备面试,今天我们来回答: HashTable,HashMap,TreeMap的区别? 共同点:都是Map的子类或者间接子类,以键值对的形式存储和操作数据。 区别如下表: 项目 线程安全 是否支持null键值 使用场景 HashTable 是 不支持 java早期hash实现,同步开销大不推荐被使用 HashMap 否 支持 大部分场景的首选put,get时间复杂度是常数级别 TreeMap 否 不支持 基于红黑树提供顺序访问的map,传入比较器来决定顺序,get,put,remove操作时间复杂度log(n) 下面分析一下面试官可能根据上面的问题进行一些扩展的点。 Map的类层级 HashTable是java早期的hash实现,实现了Dictionary接口; TreeMap是根据比较器来决定元素的顺序; LinkedHashMap 按照插入的顺序来遍历。下面的代码是一个不经常使用的资源自动释放的例子。 package org.example.mianshi; import java.util.LinkedHashMap; import java.util.Map; /** * 不常使用的资源被释放掉 * */ public class App { public static void main( String[] args ) {

linux内核链表

血红的双手。 提交于 2020-03-25 07:41:52
链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。 一、链表结构 单链表结构如下:  双链表结构如图: struct list_head { struct list_head *next, *prev; }; 二、链表初始化 #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) static inline void INIT_LIST_HEAD(struct list_head *list) { list->next = list; list->prev = list; } 初始化链表,将next、prev指针都初始化为指向自己; 三、判断链表是否为NULL Linux用头指针的next是否指向自己来判断链表是否为空: /** * list_empty - tests whether a list is empty * @head: the list to test. */ static

buffer cache 深度解析

╄→гoц情女王★ 提交于 2020-03-25 06:32:16
本文首先详细介绍了oracle中buffer cache的 概念 以及所包含的 内存结构 。然后结合各个后台进程(包括DBWRn、CKPT、LGWR等)深入介绍了oracle对于buffer cache的管理机制,并详细解释了oracle为什么会采用现在的管理机制,是为了解决什么问题。比如为何会引入touch次数、为何会引入增量检查点等等。最后全面介绍了有关buffer cache监控以及调优的实用方法。 1. buffer cache的 概念 用最简单的语言来描述oracle数据库的本质,其实就是能够用磁盘上的一堆文件来存储数据,并提供了各种各样的手段对这些数据进行管理。作为管理数据的最基本要求就是能够保存和读取磁盘上的文件中的数据。众所周知,读取磁盘的速度相对来说是非常慢的,而 内存 相对速度则要快的多。因此为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。而oracle对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做buffer cache。按照oracle官方的说法,buffer cache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。通过初始化参数:buffer_cache_size来指定buffer cache的大小。oracle实例一旦启动

C++链表 实操

百般思念 提交于 2020-03-25 04:25:03
一、链表的基础操作 1.定义一个链表 struct ListNode{ int val; ListNode *next,*last; ListNode(int x):val(x),next(NULL),last(NULL){} }; 2.创建一个基础链表(长度为n) ListNode* create_normal_list(int n){ ListNode *head,*normal,*end; //创建头节点,中间节点,尾节点(当前最后一个节点) head=new ListNode(0); //分配内存 end=head; //目前尾节点就是头节点 for(int i=1;i<=n;i++){ normal=new ListNode(0); //建立中间节点 end->next=normal; //尾节点的下一个节点就是中间节点 normal->last=end; //中间节点的前一个节点就是尾节点 end=normal; //把尾节点往后移一位,变成当前的中间节点 } end->next=NULL; //尾节点最后指向一个新的空地址 head->last=NULL; //头节点的前一位不存在 return head; } 3.创建环状链表 将链表的尾节点练到头节点,就是一个环 ListNode* create_circle_list(int n){ ListNode *head

二叉树转链表

我们两清 提交于 2020-03-25 01:57:28
114. 二叉树展开为链表 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树   1   / \   2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \    3 \ 4     \      5       \       6 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public void flatten(TreeNode root) { if(root == null) return; TreeNode cur = root; while(cur != null){ if(cur.left != null){ TreeNode p = cur.left; while(p.right != null) p = p.right; p.right = cur.right; cur.right = cur.left; cur.left = null; } cur = cur.right; } } } 来源: https://www.cnblogs.com/zzytxl/p

每个程序员都必须掌握的 8 种数据结构!

不想你离开。 提交于 2020-03-24 12:27:28
作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表 链表是一种顺序结构

每个程序员都必须掌握的 8 种数据结构!

我只是一个虾纸丫 提交于 2020-03-24 11:40:47
3 月,跳不动了?>>> 作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表

环形链表

不问归期 提交于 2020-03-24 06:41:16
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/linked-list-cycle-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 要求开始入环的第一个节点,可以求出最后一个入环点,并且next即为初始入环点。 然而官方解法: 首先,我们分配一个 Set 去保存所有的列表节点。我们逐一遍历列表,检查当前节点是否出现过,如果节点已经出现过,那么一定形成了环且它是环的入口。否则如果有其他点是环的入口,我们应该先访问到其他节点而不是这个节点。其他情况,没有成环则直接返回 null 来源: https://www.cnblogs.com/heracles-Mercury/p/11120973.html