数据结构题
阿提娜
你若盛开,蝴蝶自来。
展开
-
分隔链表问题
1.给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。应当 保留 两个分区中每个节点的初始相对位置。输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]class Solution { public ListNode partition(ListNode head, int x.原创 2022-05-07 19:20:12 · 317 阅读 · 1 评论 -
合并两个有序链表
1.将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]解题思路:1.用尾插的方法来合并链表,没有新建节点,是拼接节点。2.先是判断特殊情况,若l1和l2中其中一个为空,直接链接对方链表:例如l1为空,则链接l原创 2022-05-07 18:15:12 · 7039 阅读 · 1 评论 -
回文链表问题
1.给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。示例 1:输入: head = [1,2,3,3,2,1]输出: true示例 2:输入: head = [1,2]输出: false/** * 回文链表 */public class Num027 { public boolean isPalindrome(ListNode head) { //需要创建一个新...原创 2022-05-07 17:15:28 · 514 阅读 · 1 评论 -
链表中倒数第K个节点
1.输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解题思路:首先在题目没有告知链表为空时,要先判断边界条件。链表为空或者K为0时返回空。当K大于链表的长度或者小于等原创 2022-05-06 15:29:52 · 527 阅读 · 1 评论 -
链表中的中间节点
1.给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next..原创 2022-05-06 14:49:32 · 1379 阅读 · 2 评论 -
反转链表的实现(三种方法)
给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]/** * 反转链表 * 可以用迭代和递归方式来完成反转 */public class Num206 { public ListNode reverseList(ListNode head) { ...原创 2022-05-06 03:00:00 · 1370 阅读 · 1 评论 -
删除排序链表中的重复元素(二)
1.题目描述给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]解题思路:1. 采用三指针法,并且prev一定指向不重复的节点。2.prev先指向虚拟头节点dummyHead, cur指向头节点, next指向头节点后一位。当next为空时..原创 2022-05-04 16:44:01 · 531 阅读 · 1 评论 -
删除链表中的重复元素
1.删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例一:输入:head = [1,1,2]输出:[1,2]示例二:输入:head = [1,1,2,3,3]输出:[1,2,3]解题思路:1.找到多个相邻节点的值是相同的,及是比较prev和cur(prev下一个节点)的节点值的情况。2.找到重复元素后,重复元素保留一次,及保留第一个重复元素,prev指向的是第一个重复节点,删除原创 2022-05-04 14:44:27 · 6374 阅读 · 3 评论 -
移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]/** * Definition for singly-linked list. * pu原创 2022-05-03 04:00:00 · 451 阅读 · 1 评论 -
递归求解汉诺塔问题
一.问题描述 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。应该如何操作?代码的实现:public class tower { public static void main(Stri...原创 2022-04-25 23:21:57 · 150 阅读 · 1 评论 -
判断是否是平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4 4...原创 2022-04-25 00:16:22 · 3051 阅读 · 1 评论 -
用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有push to top,peek/pop from top,siz...原创 2022-04-15 18:24:18 · 91 阅读 · 1 评论 -
用队列实现栈
1.双队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。链接:https://leetcode-cn.com/problems/implement-stack-usin原创 2022-04-15 17:10:04 · 205 阅读 · 1 评论 -
双栈实现最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。示例 1:输入:["MinStack","push","push","push","getMin","pop","top","getMin".原创 2022-04-15 15:47:28 · 336 阅读 · 1 评论 -
牛客网-NC227
描述给定一个整数数组,数组中有一个数出现了一次,其他数出现了三次,请找出只出现了一次的数。数据范围:数组大小满足 1 \le n \le 10^5 \1≤n≤105 ,数组中每个元素大小满足 -2^{31} \le val \le 2^{31}-1 \−231≤val≤231−1示例1输入:[1]返回值:1示例2输入:[1,2,2,2]返回值:1题解: 首先创建一个Map,遍历数组,利用键值对表示数组中的元素及其出现的次数。如果第一次出现将其的key值设...原创 2022-04-14 21:41:28 · 170 阅读 · 1 评论