【每日刷题】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++·人工智能·深度学习·学习·tcp/ip·算法·rpc
hetao173383714 分钟前
2026-10-03 hetao1733837 的刷题记录
c++·算法
小灰灰搞电子24 分钟前
C语言 <stdio.h> 头文件详解
c语言·stdio.h
这张生成的图像能检测吗27 分钟前
(论文速读)Object-Driven Multi-Layer Scene Decomposition:从单张图像恢复遮挡后的多层场景
人工智能·算法·计算机视觉·rgb-d·场景分解
嘎嘎风29 分钟前
MiniMind 学习笔记之 01 一个 64M 的模型,凭什么像 ChatGPT?
算法
mmmmath_333 分钟前
LeetCode.150.逆波兰表达式求值
数据结构
Evand J36 分钟前
【MATLAB例程】三维快速扩展随机树(RRT)路径规划与到达角(AOA)定位算法|三维避障+定位仿真。附下载链接
开发语言·算法·matlab·路径规划·定位
漂流瓶jz1 小时前
UVA-1610 聚会游戏 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·题解·aoapc·算法竞赛入门经典·uva
imDwAaY1 小时前
Redis Set 如何节省内存?从整数集合到哈希表的设计取舍
数据结构·redis·散列表
yyy(十一月限定版)1 小时前
CF2131D Arboris Contractio
算法