【每日刷题】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

{

arr[i] = pmove->val;

pmove = pmove->next;

}

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

arr1[0] = arr[0];//第一个节点不变

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

int y = 1;

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

{

if(i%2==1)

{

arr1[i] = arr[x];

x--;

}

else if(i%2==0)

{

arr1[i] = arr[y];

y++;

}

}

pmove = head;

int j = 0;

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

{

pmove->val = arr1[j++];

pmove = pmove->next;

}

}

相关推荐
那个村的李富贵21 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿21 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码21 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好21 小时前
数据结构——哈希表
数据结构·散列表
琹箐1 天前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia11 天前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了1 天前
数据结构之树(Java实现)
java·算法
算法备案代理1 天前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.1 天前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
我能坚持多久1 天前
【初阶数据结构01】——顺序表专题
数据结构