update list

This commit is contained in:
ranwenjie
2021-08-02 13:44:42 +08:00
parent 46f1c0e993
commit 0a3e78402e
3 changed files with 48 additions and 14 deletions
+4 -14
View File
@@ -95,10 +95,9 @@ p->next=NULL。此时,原单链表可以看作两条单链表,一条从head
## 复杂链表的复制 ## 复杂链表的复制
题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外, 题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
``` ```
struct ComplexNode struct ComplexNode
{ {
int m_nValue; int m_nValue;
ComplexNode* m_pNext; ComplexNode* m_pNext;
@@ -122,8 +121,7 @@ struct ListNode
}; };
``` ```
分析: 分析:第一个公共节点,也就是2个链表中的节点的m_pNext 指向的同一个节点。
第一个公共节点,也就是2个链表中的节点的m_pNext 指向的同一个节点。
1. 先遍历2个链表,得到各自的长度,和差sub 1. 先遍历2个链表,得到各自的长度,和差sub
2. 长链表先遍历sub个节点,然后2个节点一起遍历 2. 长链表先遍历sub个节点,然后2个节点一起遍历
@@ -149,6 +147,7 @@ struct ListNode{
## 在O(1)时间内删除链表结点 ## 在O(1)时间内删除链表结点
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: 题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
``` ```
@@ -185,15 +184,6 @@ struct node{
## 链表和数组的区别在哪里?
分析:主要在基本概念上的理解。
但是最好能考虑的全面一点,现在公司招人的竞争可能就在细节上产生,
谁比较仔细,谁获胜的机会就大。
@@ -77,6 +77,20 @@ tmp[i] = tmp[i]>=0 ? tmp[i] : tmp[i]+16;
``` ```
## ipv4 转 int
比如: 10.67.81.35 , 转为int 为
思路:
```
代码
```
那么,int 转 ipv4 如何解呢?
## 判断一个自然数是否是某个数的平方 ## 判断一个自然数是否是某个数的平方
@@ -109,6 +109,23 @@ int findaddends(int *data,int length,int sum,int *a,int *b);
巧妙解法:数组2端向中间扫描,复杂度O(N) 巧妙解法:数组2端向中间扫描,复杂度O(N)
## 求连续子数组和为m的组合
数组 [2,3,1,2,4,3]求连续子数组sum=7, 结果[1,2,4] [3,4]
* 暴力遍历
* 滑动窗口, 左指针,右指针
```
if sum<k && r<len{
sum+=arr[r]
r++
}else{
sum -= arr[l]
l++
}
```
## 和为m的组合 ## 和为m的组合
@@ -127,6 +144,11 @@ print_sum_detials(int n , int sum)
4. 规划方程 4. 规划方程
## 钞票面值100,50,20,10,5,2,1 元,求支付628元最少需要几张钞票
思路: 贪心算法
## 若干个数的和与M最为接近 ## 若干个数的和与M最为接近
@@ -205,6 +227,14 @@ print_sum_detials(int n , int sum)
## 数组分隔成和相等的2个子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等 (eetcode 416, 难度中等)
思路: 动态规划
## 奇偶分离 ## 奇偶分离
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。