news 2026/2/28 3:37:34

【学习记录】第六周

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【学习记录】第六周

一、本周核心学习内容

  1. 链表基础知识复习
    单链表结构回顾:复习了链表节点的基本定义、链表的创建、插入、删除和遍历操作
    链表与数组对比:重新梳理了链表在动态内存分配、插入删除效率等方面的优势
    常见链表操作:包括反转链表、合并有序链表、检测环等基础算法
  2. 双指针技术深入掌握
    本周重点学习了三种双指针应用场景:

快慢指针应用

// 1. 检测链表环structListNode{intval;structListNode*next;};inthasCycle(structListNode*head){if(head==NULL||head->next==NULL){return0;}structListNode*slow=head;structListNode*fast=head;while(fast!=NULL&&fast->next!=NULL){slow=slow->next;// 慢指针走一步fast=fast->next->next;// 快指针走两步if(slow==fast){// 两指针相遇,说明有环return1;}}return0;// 无环}

左右指针应用

// 2. 反转链表(双指针实现)structListNode*reverseList(structListNode*head){structListNode*prev=NULL;structListNode*curr=head;while(curr!=NULL){structListNode*nextTemp=curr->next;// 暂存下一个节点curr->next=prev;// 反转指针方向prev=curr;// 前指针后移curr=nextTemp;// 当前指针后移}returnprev;// 新的头节点}

前后指针应用`

// 3. 删除链表倒数第N个节点structListNode*removeNthFromEnd(structListNode*head,intn){structListNodedummy={0,head};// 虚拟头节点简化边界处理structListNode*first=&dummy;structListNode*second=&dummy;// 让first指针先走n+1步for(inti=0;i<=n;i++){first=first->next;}// 两个指针同步移动,直到first到达末尾while(first!=NULL){first=first->next;second=second->next;}// 删除目标节点structListNode*toDelete=second->next;second->next=second->next->next;returndummy.next;}

快慢指针找链表中点

// 找到链表的中间节点structListNode*findMiddle(structListNode*head){if(head==NULL||head->next==NULL){returnhead;}structListNode*slow=head;structListNode*fast=head;// 快指针每次走两步,慢指针每次走一步while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next->next;}returnslow;// 当快指针到达末尾时,慢指针刚好在中间}

双指针判断回文链表

// 判断链表是否为回文结构intisPalindrome(structListNode*head){if(head==NULL||head->next==NULL){return1;}// 步骤1:找到中点structListNode*slow=head;structListNode*fast=head;while(fast->next!=NULL&&fast->next->next!=NULL){slow=slow->next;fast=fast->next->next;}// 步骤2:反转后半部分链表structListNode*secondHalf=reverseList(slow->next);// 步骤3:比较前后两部分structListNode*p1=head;structListNode*p2=secondHalf;intresult=1;while(result&&p2!=NULL){if(p1->val!=p2->val){result=0;}p1=p1->next;p2=p2->next;}// 步骤4:恢复原链表(可选)slow->next=reverseList(secondHalf);returnresult;}

双指针解决两数相加

// 两个链表表示的非负整数相加structListNode*addTwoNumbers(structListNode*l1,structListNode*l2){structListNodedummy={0,NULL};structListNode*curr=&dummy;intcarry=0;// 进位while(l1!=NULL||l2!=NULL||carry!=0){intsum=carry;if(l1!=NULL){sum+=l1->val;l1=l1->next;}if(l2!=NULL){sum+=l2->val;l2=l2->next;}carry=sum/10;// 计算进位curr->next=(structListNode*)malloc(sizeof(structListNode));curr->next->val=sum%10;// 当前位结果curr->next->next=NULL;curr=curr->next;}returndummy.next;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 19:33:18

Cursor高级技巧与最佳实践

Cursor 高级技巧与最佳实践&#xff08;2025 年 12 月最新版&#xff09; 掌握 Cursor 的高级用法&#xff0c;能让你从“用 AI 写代码”进化到“与 AI 协作如高级搭档”。以下技巧基于 2025 年社区最佳实践&#xff08;如 Builder.io、DEV Community、Cursor 官方文档&#x…

作者头像 李华
网站建设 2026/2/27 18:25:12

Cursor + MCP:冲击的不仅是前端,而是整个软件开发范式!

Cursor MCP&#xff1a;冲击的不仅是前端&#xff0c;而是整个软件开发范式&#xff01; 是的&#xff0c;你说得太对了&#xff01;Cursor Model Context Protocol (MCP) 的组合&#xff0c;正在从前端出发&#xff0c;迅速向全栈、后端、自动化测试、部署甚至非编程领域&a…

作者头像 李华
网站建设 2026/2/25 22:16:22

2025年十大旗舰对决:极致轻薄成高端手机新战场

移动通信技术持续演进着&#xff0c;消费者对于智能手机的期待&#xff0c;不再仅仅局限于性能的强劲&#xff0c;机身设计方面极致的纤薄以及轻盈&#xff0c;现已成为高端市场的一项重要追求&#xff0c;到了2025年&#xff0c;这一趋势抵达了新的高度&#xff0c;好多款旗舰…

作者头像 李华
网站建设 2026/2/27 6:11:13

【Vue3】 中 ref 与 reactive:状态与模型的深入理解

目录Vue3 中 ref 与 reactive&#xff1a;状态与模型的深入理解一、概念区分&#xff1a;状态 vs 模型状态&#xff08;State&#xff09;模型&#xff08;Model / 业务模型&#xff09;二、ref vs reactive 使用原则三、典型使用示例状态&#xff08;ref&#xff09;模型&…

作者头像 李华
网站建设 2026/2/27 4:04:07

毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉…

作者头像 李华
网站建设 2026/2/23 17:23:56

全球最大、最领先的吉利全球全域安全中心正式发布

12月12日&#xff0c;吉利全球全域安全中心正式发布&#xff0c;并一举创下“全球最大的汽车安全试验室”、“全球最长的室内汽车碰撞测试跑道”、“全球最大的汽车环境风洞试验室”、“全球最大的任意角度汽车碰撞测试区&#xff08;0-180&#xff09;”、“全球测试功能最多的…

作者头像 李华