This commit is contained in:
ranwenjie
2021-09-08 14:00:57 +08:00
parent f7910d8d4a
commit 3deb75f3f1
4 changed files with 45 additions and 27 deletions
+19 -2
View File
@@ -8,6 +8,12 @@
* 2个链表相交
* 2个链表合并
常用解题思路
* 双指针
* 3指针
* 快慢指针
## 判断俩个链表是否相交
@@ -60,8 +66,18 @@ Node * sort_link_list_increasing_order (Node *pheader):
## 给定单链表,检测是否有环。
使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。
```
int isLinkCicle(Link *head);
```
解题思路
1. 暴力
2. 空间换时间,用一个HashMap
3. 快慢指针: 使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步。如果p2到达链表尾部,说明无环,否则p1、p2必然会在某个时刻相遇(p1==p2),从而检测到链表中有环。
类似的题有:
@@ -82,6 +98,7 @@ p->next=NULL。此时,原单链表可以看作两条单链表,一条从head
于是运用题二的方法,我们找到它们的第一个交点即为所求。
## 删除链表中的p节点
只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点。
+5 -2
View File
@@ -15,10 +15,10 @@
分析:
1. 不能使用循环,那就用递归
2. 递归需要终止递归的条件判断语句,这里也不能用if,想其他办法,可以使用 &&逻辑与 运算符(在n>0条件满足是,才会指向后面的递归语句
2. 递归需要终止递归的条件判断语句,这里也不能用if,想其他办法,可以使用 &&逻辑与 运算符(在n>0条件满足是,才会指向后面的递归语句)
```
int (n){
int sum(n){
int sum=0;
(n>0) && sum=n+factorial(n-1)
return sum;
@@ -28,6 +28,9 @@ int (n){
## 大数阶乘(factorial)
> 阶乘 n*(n-1)*(n-2)*...*1
主要考虑算出来的结果肯定会大于int表达的范围,这时候怎么处理?
```
int factorial(n){
@@ -56,7 +56,7 @@ long long sum(unsigned int n);
```
int sum(int,int)
int sum(int a,int b
```
@@ -72,20 +72,6 @@ int ugly(int n)
### 把字符串转换成整数
比如 "12343567754" -> 12343567754
`NULL,空串,正负号,溢出`
```
int strToInt(char str);
```
# 字符串
@@ -102,6 +88,18 @@ void replace_blank(char *str);
```
### 把字符串转换成整数
比如 "12343567754" -> 12343567754
`NULL,空串,正负号,溢出`
```
int strToInt(char str);
```
### 第一个只出现一次的字符
@@ -8,17 +8,18 @@
4. 数学之趣: 一些数学问题
《剑指offer》中已经出现的题目先不写了
### 游戏之乐
####
# 游戏之乐
### 数字之魅
# 数字之魅
#### 二进制数中1的个数
#### 阶乘
@@ -74,7 +75,7 @@
### 结构之法
# 结构之法
#### 字符串移位包含的问题
@@ -110,8 +111,7 @@
### 数学之趣
# 数学之趣
####