![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
萌萌,站起来
这个作者很懒,什么都没留下…
展开
-
new 反转链表
三个指针 public class Solution { public ListNode ReverseList(ListNode head) { if(head==null||head.next==null) return head; // ListNode dummy=new ListNode(-1); // dumm...原创 2019-11-19 15:41:14 · 49 阅读 · 0 评论 -
new lee103 按之字形顺序打印二叉树 stack看懂了不知道错在哪
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 思路 大家的实现很多都是将每层的数据存进ArrayList中,偶数层时进行reverse操作, 在海量数据时,这样效率太低了。 (我有一次面试,算法考的就是之字形打印二叉树,用了reverse, 直接被鄙视了,面试官说海量数据时效率根本就不行。) 下面...原创 2019-10-27 18:09:06 · 123 阅读 · 1 评论 -
new 在 O(1) 时间内删除链表节点 删除链表中的重复节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思考 双指针 双指针 每次cur看他的下一个是不是相同元素,相同单独挪动,不同一起挪动 注:每次新建一个指针,cur = pre.next 这样快一点 /* public c...原创 2019-10-27 14:11:47 · 94 阅读 · 0 评论 -
new 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。 直接 先遍历一遍链表得到链表长度 再遍历找到倒数第k个 两次遍历 双指针 先移动第一个指针到第k个节点 在一起移动第一个和第二个 第一个到头时,第二个指针指的就是倒数第k个 注意: 要注意 链表为空、k<=0、k值大于链表长度的问题 /* public class ListNode { int val; ListNode next...原创 2019-10-26 22:40:45 · 68 阅读 · 0 评论 -
new 链表中环的入口结点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。原创 2019-10-26 22:31:26 · 103 阅读 · 0 评论 -
new 圆圈中最后剩下的数
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,...原创 2019-10-25 22:55:59 · 86 阅读 · 0 评论 -
new 两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共结点。 直接 在第一个链表上遍历每个节点,每遍历一个节点,就在第二个链表上顺序遍历每个节点 时 O(mn) HashMap /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } ...原创 2019-10-20 21:50:17 · 132 阅读 · 0 评论 -
new 复杂链表的复制 未完待续
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路 解题思路: 1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面; 2、重新遍历链表,复制老结点的随机指针给新结点,如A1.random = A.rand...原创 2019-10-16 21:51:33 · 96 阅读 · 0 评论 -
new合并两个排序的链表待补充
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不 递归 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { ...原创 2019-10-15 18:50:04 · 77 阅读 · 0 评论 -
new3从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 非递归 ArrayList 中add添加 listNode 是链表,只能从头遍历到尾,但是输出却要求从尾到头,这是典型的"先进后出",我们可以想到栈! ArrayList 中有个方法是 add(index,value),可以指定 index 位置插入 value 值 所以我们在遍历 listNode 的同时将每个遇到的值插入到 lis...原创 2019-10-11 17:32:01 · 57 阅读 · 0 评论 -
映射Map的底层方法实现
映射 字典 public interface Map<K,V> { void add(K key,V value); V remove(K key); boolean contains(K key); V get(K key); void set(K key,V newValue); int getSize(); boolean ...原创 2019-10-05 21:53:39 · 202 阅读 · 0 评论 -
集合Set的两个底层实现方法
集合方法 每个元素只能出现一次 典型应用:客户统计、词汇量统计 void add(E e); void remove(E e); boolean contains(E e); int getSize(); boolean isEmpty(); } BST、LinkedList都属于动态结构 基于链表的集合实现 public class LinkedList...原创 2019-10-05 21:11:07 · 353 阅读 · 0 评论 -
算法5链表 递归
链表 移除链表元素le203 1.使用虚拟头结点 public ListNode removeElements(ListNode head, int val) { ListNode dummyHead = new ListNode(-1); dummyHead.next=head; ListNode cur=dummyHead; while(cu...原创 2019-09-29 23:10:21 · 113 阅读 · 0 评论