news 2026/5/12 4:22:07

【学习记录】第六周

作者头像

张小明

前端开发工程师

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/5/1 15:23:20

全网最全 Cursor 配置指南:从入门到高效工作流!建议收藏

全网最全 Cursor 配置指南&#xff1a;从入门到高效工作流&#xff01;建议收藏&#xff08;2025年12月最新版&#xff09; Cursor 是2025年最强大的AI代码编辑器&#xff0c;基于VS Code构建&#xff0c;深度集成Claude 3.5 Sonnet、GPT-4o等模型。正确配置能让你的开发效率提…

作者头像 李华
网站建设 2026/5/10 12:48:08

一文了解AOSP是什么?

一文了解 AOSP 是什么&#xff1f; AOSP&#xff08;Android Open Source Project&#xff0c;Android 开源项目&#xff09;是 Android 操作系统的核心开源基础&#xff0c;由 Google 主导维护。它是 Android 的“纯净版”源代码&#xff0c;任何人都可以免费下载、修改和构建…

作者头像 李华
网站建设 2026/5/7 22:08:03

盘点全球领先照明企业:技术优势与市场特色全解析

鉴于LED照明行业处于高速发展的状况下&#xff0c;许多厂家依据各自的技术积累以及市场定位&#xff0c;为全世界用户给予了丰富多样的照明解决办法。这篇文章的意图就是梳理与介绍行业里部分具有代表性最为领先的企业&#xff0c;经由剖析它们的发展进程、技术特性以及核心优势…

作者头像 李华
网站建设 2026/5/4 4:07:13

日拱一卒之最小二乘法

日拱一卒之最小二乘法 由于最小二乘法在最近出现的频率比较高&#xff0c;所以单独拎出来研究研究&#xff0c;b站上有个几何的解读&#xff0c;虽然感觉弄得不错&#xff0c;但是还是觉得有点深了&#xff0c;而且有点快&#xff0c;各种公式的嵌套看的有点乱&#xff0c;于是…

作者头像 李华
网站建设 2026/5/10 5:58:57

PS 例程大全

PS 例程大全&#x1f4da; PS 基础语法ps [options]&#x1f527; 常用选项组合组合说明输出内容ps auxBSD风格&#xff0c;最常用所有用户的所有进程ps -efUNIX/标准风格完整格式列表ps -eF扩展完整格式更多细节ps -ely长格式详细技术信息ps -ejH显示进程树层次结构ps -eLf显示…

作者头像 李华