超新星燃烧之习题
文章平均质量分 57
常见的习题
超新星燃烧
这个作者很懒,什么都没留下…
展开
-
K组翻转链表
力扣链接题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。大题思路如下:翻转局部链表,也就是简单的翻转链表1.定一个傀儡节点temp,让pre 和 cur执行傀儡节点;2.让cur先走k步,然后让start指向per.next,end指向cur,cur指向cur.next;3.翻转局部后,在重新拼接class Solution { pu原创 2021-08-09 19:56:58 · 129 阅读 · 0 评论 -
Java实现LRU缓存机制
力扣链接方法一:使用 LinkedHashMappublic class LRUCache{ int capacity; Map<Integer, Integer> map; public LRUCache(int capacity) { this.capacity = capacity; map = new LinkedHashMap<>(); } public int get(int key) {原创 2021-08-09 13:45:12 · 291 阅读 · 0 评论 -
复杂链表的复制
力扣链接牛客链接复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。此题,我们需要用到链表和哈希表的用法如下图:1.定义一个cur指向head,遍历链表,每次遍历的时候new一个node节点把当前的节点的值赋给node,但是next域不能赋值,因为如果你要复制一个链表,那么复制出来的链表都会有新的地址,如果你把原来节点的next域,也复制给新的node,就不是深拷贝了,2.那么我们要怎么解决呢?我原创 2021-08-07 16:00:11 · 122 阅读 · 0 评论 -
Java删除链表中重复的结点
牛客链接1.由于链表是排序好的,所以就减少了一些麻烦首先我们需要定义一个傀儡节点(head),来减少边界判断,把后续的答案往后的答案接在傀儡节点之后;让傀儡节点连接,整个链表同时,定义一个cur 指向 傀儡节点的下一个节点定义一个pre指向当前傀儡节点此时需要判断当前cur节点是否和他的下一个节点重复,如果不重复,pre指向cur,cur指向cur.next;注意:判断cur下一个节点的值时,需要先判断cur.next是否为空,不然会导致空指针~~此时cur的值和cur.next的值相原创 2021-08-07 13:24:01 · 253 阅读 · 0 评论 -
按之字形顺序打印二叉树
牛客链接思路:总体来说,思路和二叉树的层序遍历一样只不过通过,队列和栈来解决,在遍历的时候,奇数层入队,而偶数层入栈队列是先入先出,栈是先入后出,所以可以很好的满足之字打印然后遍历队或栈的元素,放在list里面过程很简单,在遍历的时候,奇数层入队,而偶数层入栈,取出栈或队列的元素放入list中就OK了import java.util.*;public class Solution { public ArrayList<ArrayList<Integer> &g原创 2021-08-06 13:25:49 · 93 阅读 · 0 评论 -
二叉树的层序遍历(从上到下打印二叉树)
牛客链接思路:1 .初始化:一个队列Queue< TreeNode > queue, 将root节点入队列queue第一次size = 1,2. 如果队列不空,做如下操作:注意每次进入循环时,先获取到队列里元素的个数,即queue.size();第,二次进去时,size为2,弹出队列头,保存为,将cur的左右非空孩子加入队列循环2,3步骤,直到队列为空public class Solution { public ArrayList<Integer>原创 2021-08-05 22:19:40 · 166 阅读 · 0 评论 -
栈的压入弹出序列(Java)
牛客链接输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)举例:输入:[1,2,3,4,5],[4,3,5,1,2]返回值:false首先我们要知道栈是先入后出的原理。思路:首先我们遍历pushA数组,将它依次入栈,入栈的同时判断栈头元素是原创 2021-08-05 14:16:23 · 155 阅读 · 0 评论 -
Java 用队列实现栈 | 用栈实现队列
力扣链接首先我们要了解栈和队列的机制栈和队列解题思路:首先我们知道,队列是先进先出,栈是后进先出。然后我们用两个队列来解决。一个队列为主队列,一个为辅助队列,当入栈操作时,我们先将主队列内容导入辅助队列,然后将入栈元素放入主队列队头位置,再将辅助队列内容,依次添加进主队列即可。class MyStack { public Queue<Integer> q1; public Queue<Integer> q2; /** Initialize you原创 2021-08-02 01:15:27 · 207 阅读 · 0 评论 -
翻转链表问题
牛客链接力扣链接方法一:修改节点的指向首先我们判断头结点是否为空,如果为空直接return null,如果不判断,会导致后面的代码产生空指针异常。1.首先我们先定义3个指针一个指向头结点(prev),一个指向头结点的下一个节点(cur),另外还需在定义一个保存cur下一个节点的指针(curNext);2.此时我们判断当前的cur节点是否为空,如果不为空进入循环让curNext指向 cur的下一个节点,此时我们让cur 的next域指向cur的前置节点prev然后再让prev指向cur ,原创 2021-07-30 01:12:47 · 87 阅读 · 0 评论 -
移除链表元素
力扣链接给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。方法一:双指针思路:第一步:定义两个指针,一个指向头结点(prev),一个指向头结点的下一个节点(cur)第二步:遍历链表,如果该节点的值等于要删除的值,让prev的next域存放cur的next域如果cur的值不等于要删除的值 两个指针都往后走一步 prev指向curcur继续向下走,当cur为空时退出循环第三步:判断头结点是否为要原创 2021-07-30 12:02:49 · 113 阅读 · 0 评论 -
环形链表问题
力扣链接牛客链接给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。方法1:快慢指针时间复杂度o(n),空间复杂度O(1)定义两个指针,一个指向头结点的慢指针(slow),一个为头结点下一个节点的快指针(fast)循环判断条件由于fast一次走两步,所以fast!=null 并且 fast.next != null && slow!=null 预防循环时空指针异常进入循环,fast走两步,slow走一步,如果fast ==原创 2021-07-31 13:54:30 · 164 阅读 · 0 评论