【每日刷题】Day15

【每日刷题】Day15

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

目录

[1. 141. 环形链表 - 力扣(LeetCode)](#1. 141. 环形链表 - 力扣(LeetCode))

[2. 142. 环形链表 II - 力扣(LeetCode)](#2. 142. 环形链表 II - 力扣(LeetCode))

[3. 143. 重排链表 - 力扣(LeetCode)](#3. 143. 重排链表 - 力扣(LeetCode))

1. 141. 环形链表 - 力扣(LeetCode)

//思路:快慢指针。pf1一次走两步,pf2一次走一步,如果是环形,pf1最终一定会追上pf2。如果不是环形,pf1最终会走出链表

typedef struct ListNode LN;

bool hasCycle(struct ListNode *head)

{

if(head==NULL||head->next==NULL)

{

return false;

}

LN* pf1 = head;

LN* pf2 = head;

while(pf1)

{

if(pf1->next==NULL)

{

return false;

}

pf1 = pf1->next->next;

if(pf1==pf2)

{

return true;

}

pf2 = pf2->next;

}

return false;

}

2. 142. 环形链表 II - 力扣(LeetCode)

//思路:快慢指针。pf1一次走两步,pf2一次走一步。当pf1 == pf2时,ptr从第一个节点与pf2同时前进,当相遇时,则是第一个入环的节点。

typedef struct ListNode LN;

struct ListNode *detectCycle(struct ListNode *head)

{

LN* pf1 = head;

LN* pf2 = head;

if(head==NULL||head->next==NULL)

{

return NULL;

}

while(pf1)

{

if(pf1->next==NULL)

{

return NULL;

}

pf1 = pf1->next->next;

pf2 = pf2->next;

if(pf1==pf2)

{

LN* ptr = head;

while(ptr!=pf2)

{

ptr = ptr->next;

pf2 = pf2->next;

}

return ptr;

}

}

return NULL;

}

3. 143. 重排链表 - 力扣(LeetCode)

//思路:本题的难点在于链表无法通过下标来访问其中的内容。但是我们知道数组可以通过下标来访问,那么很容易地可以想到用数据来解这道题。用一个数组1接收链表中每个节点val的值,再用一个数组2按照题目所给顺序从数组1中读取并存储val

typedef struct ListNode LN;

int ListNodeQua(LN* phead)//用于计算链表中节点个数

{

LN* pmove = phead;

int count = 0;

while(pmove)

{

count++;

pmove = pmove->next;

}

return count;

}

void reorderList(struct ListNode* head)

{

LN* pmove = head;

int n = ListNodeQua(head);

int* arr = (int*)malloc(sizeof(int)*n);//数组1

for(int i = 0;i<n;i++)//存储链表中的val

{

arri = pmove->val;

pmove = pmove->next;

}

int* arr1 = (int*)malloc(sizeof(int)*n);//数组2

arr10 = arr0;//第一个节点不变

int x = n-1;//尾下标

int y = 1;

for(int i = 1;i<n;i++)//按照题目所给顺序从数组1中拿取数据

{

if(i%2==1)

{

arr1i = arrx;

x--;

}

else if(i%2==0)

{

arr1i = arry;

y++;

}

}

pmove = head;

int j = 0;

while(pmove)//最后再将数组2中的数据放入链表中

{

pmove->val = arr1j++;

pmove = pmove->next;

}

}

相关推荐
天空'之城2 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
小程故事多_804 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_956121976 小时前
二分算法(知识点+题目)
c++·算法
AndrewHZ8 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
小星星闪亮登场9 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
冻柠檬飞冰走茶10 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
玖玥拾10 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
数据皮皮侠AI10 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法
stevenseahang10 小时前
C语言标准演化史:从K&R到GNU,谁才是正统?
c语言·gnu·可移植性·标准演化·ansic
2501_9423895510 小时前
Epoch AI旗下FrontierMath的负责人Elliot Glazer
数据结构·决策树·动态规划·散列表