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

}

}

相关推荐
Coovally AI模型快速验证18 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
王磊鑫1 小时前
C语言小项目——通讯录
c语言·开发语言
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨1 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
BoBoo文睡不醒1 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
苦 涩3 小时前
考研408笔记之数据结构(七)——排序
数据结构
CM莫问3 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
graceyun4 小时前
C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】
c语言·开发语言