力扣刷题记录1(无算法背景,纯C语言)

1、零移动(238双指针)

使用一个快指针一个慢指针,一个用来填充一个用来查找,最后补零

cpp 复制代码
void moveZeroes(int* nums, int numsSize) 
{
    int slow = 0;
    for(int fast = 0; fast < numsSize; fast ++)
    {
        if(nums[fast] != 0)
        {
            nums[slow++] = nums[fast];
        }
    }
    for(int fast = slow; fast < numsSize; fast ++)
    {
        nums[fast] = 0;
    }
}

2、翻转链表(206链表)

cpp 复制代码
struct ListNode* reverseList(struct ListNode* head) 
{
    struct ListNode *temp1 = NULL;
    struct ListNode *temp2 = head;
    while(temp2 != NULL)
    {
        struct ListNode *temp3 = temp2 -> next;
        temp2 -> next = temp1;
        temp1 = temp2;
        temp2 = temp3;
    }
    return temp1;
}

3、相交链表(160 双指针链表)

cpp 复制代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode *pA = headA;
    struct ListNode *pB = headB;
    int Flag = 0;
    while(pA != pB)
    {
        if(pB->next == NULL)
        {
            pB = headA;
            Flag++;
        }
        else
        {
            pB = pB->next;
        }
        if(pA->next == NULL)
        {
            pA = headB;
            Flag++;
        }
        else
        {
            pA = pA->next;
        }
        if(Flag > 2)return NULL;
    }
    return pA;
}

4、回文链表(234链表双指针)

cpp 复制代码
bool isPalindrome(struct ListNode* head) {
    //找中点(Fast走两步,Slow走一步)
    if(head == NULL || head -> next == NULL) return true;
    struct ListNode* pSlow = head;
    struct ListNode* pFast = head;
    
    while(pFast != NULL && pSlow != NULL)
    {
        pFast = pFast -> next;
        //判断奇偶
        if(pFast == NULL)
        {
            pSlow -> next;
            break;
        }
        pFast = pFast -> next;
        pSlow = pSlow -> next;
    }
    //翻转后边的链表
    struct ListNode* temp1 = NULL;
    struct ListNode* temp2 = pSlow;
    while(temp2 != NULL)
    {
        struct ListNode* temp3 = temp2->next;
        temp2 -> next = temp1;
        temp1 = temp2;
        temp2 = temp3;
    }
    //比较
    pFast = head;
    pSlow = temp1;
    while(pSlow != NULL)
    {
        if(pFast -> val != pSlow -> val) return false;
        pFast = pFast->next;
        pSlow = pSlow->next;
    }
    return true;
}   

5、环形列表(141链表双指针)

cpp 复制代码
bool hasCycle(struct ListNode *head) 
{
    if (head == NULL || head->next == NULL) return false;
    struct ListNode *pFast = head->next;
    struct ListNode *pSlow = head;

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

6、盛最多水的容器(11数组双指针)

cpp 复制代码
int maxArea(int* height, int heightSize) {
    int pPre = 0;
    int pBac = heightSize-1;
    int maxArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
    int newArea = 0;
    while(pBac > pPre)
    {
        //如果前面长后边短,后面就要找一根比前面长的
        if(height[pPre] >= height[pBac])
        {
            int prehight = height[pBac];
            while((prehight >= height[pBac]) && (pBac > pPre))
            {
                pBac--;
            }
        }
        newArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
        maxArea = maxArea > newArea ? maxArea : newArea;
        //反之
        if(height[pPre] < height[pBac])
        {
            int prehight = height[pPre];
            while((prehight >= height[pPre]) && (pBac > pPre))
            {
                pPre++;
            }
        }
        newArea = height[pPre] > height[pBac] ? height[pBac] * abs(pBac - pPre) : height[pPre] * abs(pBac - pPre);
        maxArea = maxArea > newArea ? maxArea : newArea;
    }
    return maxArea;
}
相关推荐
灰灰勇闯IT7 分钟前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk21 分钟前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou041234 分钟前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年1 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习
吴可可1231 小时前
Teigha处理CAD样条曲线的方法解析
数据库·算法·c#
啊董dong1 小时前
noi-2026年5月12号小测验
数据结构·c++·算法
不知名的忻1 小时前
红黑树(简易版)
算法·红黑树
NQBJT1 小时前
万字拆解 NeckFix:AI 脖子前倾检测的算法原理与工程实现
人工智能·算法
jaychouchannel1 小时前
Python 常用排序算法详解
算法
数智工坊1 小时前
【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
论文阅读·人工智能·算法·语言模型·机器人·无人机