Data Struct coding List

2.5k words

数据结构题单

该博客基于本人在备考研究生时学习408数据结构过程中刷过的相关题目,感兴趣的同学也可以进行尝试。 ## 链表 #### 删除节点

设计链表

反转链表

两数相加

交换节点

值得注意的地方是第一次交换的时候头节点会变成链表的第二个元素,倘若直接返回head会导致链表丢失首元素。

1
2
3
4
5
head
[0] -> [1] -> [...]

head
[1] -> [0] -> [...]

删除节点

链表相交

环形链表

环形链表II

  1. 不需要建立统一头节点,快慢指针直接从链表的第一个元素开始
  2. 先移动快慢指针,再判断快慢指针是否相等。

合并有序链表

旋转链表

回文链表

  • [ ]

删除元素

删除元素II

分隔链表

反转链表

栈与队列

使用栈实现队列

stack的pop()操作只删除,返回void,但队列的pop()要返回弹出的值,所以:

在进行pop操作的时候要先保存stack的栈顶元素,将stack的栈顶元素弹出后返回刚刚保存的值

1
2
3
4
5
6
7
8
9
10
11
12
int pop() {
while(!f.empty()){
b.push(f.top());
f.pop();
}
if(!b.empty()) {
int ans = b.top();
b.pop();
return ans;
}
return -1;
}

使用队列模拟栈

括号匹配

删除字符串中的所有相邻重复项

逆波兰表达式的计算

滑动窗口最大值

二叉树

二叉树的前序遍历(迭代)

二叉树的后序遍历(迭代)

前序遍历的顺序是 中、左、右,而后序遍历的顺序是左,右、中。我们可以在先序遍历的时候调整顺序遍历中、右、左,然后将保存的result序列反向输出得到后序遍历的结果。

二叉树的中序遍历(迭代)

二叉树的层序遍历

使用两个二维vector第一个存放Treenode*记录前一层的节点,第二个用以存放结果。遍历这一层的所有节点,将他们的左右子节点放下一层的vector中,如果它们都没有子节点则结束循环。层序遍历迭代详细笔记

二叉树的层序遍历(II)

二叉树的右视图

PS:虽然都大差不差,但是还是建议自己多敲几遍加深印象~,一味的复制粘贴并没有什么意义。

反转二叉树

对称二叉树

二叉树的最大深度

N叉树的最大深度

二叉树的最小深度

2025-06-17

位运算结合折半查找计算完全二叉树的节点个数

判断AVL树

二叉树的所有路径

左叶子的和

本质还是遍历,途中顺带确认一下有没有符合条件的节点。 - [x] 递归、轮椅。 - [x] 迭代未必不会更简单。

找树左下角的值

路径总和

做不动了做不动了,歇逼了兄弟们。

2025-06-19

后序中序构造二叉树

前序中序构造二叉树

最大二叉树

2025-06-20

合并二叉树

二叉搜索树中的搜索

验证二叉搜索树

二叉搜索树的最小绝对差

2025-06-21

二叉搜索树中的众数

二叉树的最近公共祖先

二叉搜索树中的插入操作

2025-06-22

二叉搜索树的最近公共祖先

二叉树展开为链表

2025-06-25

修剪二叉树

Comments