# CM11 链表分割

## 解法

class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
struct ListNode* lesstail=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* moretail=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* less=lesstail;
struct ListNode* more=moretail;
while(cur)
{
if(cur->val<x)
{
less->next=cur;
less=less->next;
cur=cur->next;
}
else
{
more->next=cur;
more=more->next;
cur=cur->next;
}
}
more->next=NULL;
less->next=moretail->next;
free(lesstail);
free(moretail);
}
};

# OR36 链表的回文结构

## 解法

class PalindromeList {
public:
bool chkPalindrome(ListNode* A)
{
struct ListNode*slow=A;
struct ListNode*fast=A;
while(fast->next)
{
slow=slow->next;
fast=fast->next;
}
struct ListNode*change=NULL;
{
struct ListNode*next=slow->next;
}
while(slow)
{
if(A->val!=change->val)
{
return false;
}
slow=slow->next;
change=change->next;
}
return true;
}
};

# 160. 相交链表

## 解法

return NULL;
}
struct ListNode *p, *q;
if (p != NULL)
p = p->next;
else
if (q != NULL)
q = q->next;
else
}
return p;
}

return NULL;
while(p!=q)
{
}
return q;
}

# 141. 环形链表

## 解法

return false;
}
while (slow != fast) {
if (fast == NULL || fast->next == NULL) {
return false;
}
slow = slow->next;
fast = fast->next->next;
}
return true;
}

# 142. 环形链表 II

## 解析

struct ListNode* detectCycle(struct ListNode* head) {
while (fast != NULL) {
slow = slow->next;
if (fast->next == NULL) {
return NULL;
}
fast = fast->next->next;
if (fast == slow) {
while (ptr != slow) {
ptr = ptr->next;
slow = slow->next;
}
return ptr;
}
}
return NULL;
}

# 138. 复制带随机指针的链表

## 题目

val：一个表示 Node.val 的整数。

random_index：随机指针指向的节点索引（范围从 0 到 n-1）；如果不指向任何节点，则为 null 。

## 解析

struct Node* copyRandomList(struct Node* head) {
return NULL;
struct Node* phead = (struct Node*)malloc(sizeof(struct Node));//复制后要返回的链表头结点
while(p)//p不为NULL则一直循环
{
struct Node* tmp = p->next;//保存p的下一结点
p->next = ph;//p指向ph
ph->random = p->random;//复制random指针给ph
ph->next = (struct Node*)malloc(sizeof(struct Node));//开辟下一结点空间
if(tmp)
ph = ph->next;//为真表示后面还有结点，ph指向下一结点
else
ph->next = NULL;//为假表示后面没结点了
p = tmp;//p指向p的下一结点
}
while(ph)
{
if(ph->random)//random指向空则不执行
ph->random = ph->random->next;//random指向的修正
ph = ph->next;//指向下一结点
}
}

# 结语

|
9天前
|

【面试宝藏】Redis 常见面试题解析
Redis 是内存数据结构存储系统，用作数据库、缓存和消息中间件，支持字符串、哈希、列表等数据类型。它的优点包括高性能、原子操作、持久化和复制。相比 Memcached，Redis 提供数据持久化、丰富数据结构和发布/订阅功能。Redis 采用单线程模型，但通过 I/O 多路复用处理高并发。常见的面试问题涉及持久化机制、过期键删除、回收策略、集群和客户端等。
38 4
|
9天前
|

【面试宝藏】MySQL 面试题解析
MySQL面试题解析涵盖数据库范式、权限系统、Binlog格式、存储引擎对比、索引原理及优缺点、锁类型、事务隔离级别等。重点讨论了InnoDB与MyISAM的区别，如事务支持、外键和锁机制。此外，还提到了Unix时间戳与MySQL日期时间的转换，以及创建索引的策略。
24 4
|
1天前

22 8
|
9天前
|

【面试宝藏】Redis 常见面试题解析其二
Redis 高级面试题涵盖了哈希槽机制、集群的主从复制、数据丢失可能性、复制机制、最大节点数、数据库选择、连通性测试、事务操作、过期时间和内存优化等。Redis 使用哈希槽实现数据分布，主从复制保障高可用，异步复制可能导致写操作丢失。集群最大支持1000个节点，仅允许单数据库。可通过 ping 命令测试连接，使用 EXPIRE 设置过期时间，MULTI/EXEC 等进行事务处理。内存优化包括合理数据类型、设置过期时间及淘汰策略。Redis 可用作缓存、会话存储、排行榜等场景，使用 SCAN 查找特定前缀键，列表实现异步队列，分布式锁则通过 SET 命令和 Lua 脚本实现。
24 5
|
7天前
|
Java Python

10 1
|
11天前
|
SQL 算法 大数据

13 1
|
11天前
|
SQL 算法 数据挖掘

13 1
|
11天前
|
SQL 算法 大数据

11 1
|
1天前
|

|
9天前
|

Java基础4-一文搞懂String常见面试题，从基础到实战，更有原理分析和源码解析！（二）
Java基础4-一文搞懂String常见面试题，从基础到实战，更有原理分析和源码解析！（二）
16 0