news 2026/6/10 1:07:27

【学习记录】第六周

作者头像

张小明

前端开发工程师

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/6/5 20:58:12

JSP如何结合多线程技术提升大文件上传效率?

大文件传输解决方案技术提案 项目背景与需求分析 作为山东某软件公司项目负责人&#xff0c;我公司需要为大文件传输提供一套完整的解决方案。经过详细的需求梳理&#xff0c;总结出以下几个关键需求点&#xff1a; 大文件传输能力&#xff1a;支持单文件100GB左右的上传下载…

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

ChanlunX缠论插件:让技术分析变得简单直观的智能助手

你是否曾在K线图中迷失方向&#xff1f;面对密密麻麻的K线图&#xff0c;是否感到无从下手&#xff1f;&#x1f914; 今天&#xff0c;让我们一起来了解ChanlunX缠论插件如何通过智能化算法&#xff0c;将复杂的技术分析变得简单直观。 【免费下载链接】ChanlunX 缠中说禅炒股…

作者头像 李华
网站建设 2026/6/9 0:58:31

光伏储能系统搭上虚拟同步发电机(VSG)这趟车,简直像是给新能源装了个智能大脑。今儿咱们直接上硬菜,拆解这个能跑出完美波形的并网仿真模型

光伏储能虚拟同步发电机VSG并网仿真模型C 光伏阵列搭建的光伏电池模型 光伏&#xff1a;采用扰动观察法最大功率点MPPT跟踪控制 储能&#xff1a;蓄电池充放电控制&#xff0c;双向Buck/Boost变换器&#xff0c;采用直流母线电压外环控制稳定直流母线电压&#xff0c;电池电流内…

作者头像 李华
网站建设 2026/6/9 19:44:04

在一台电脑上生成多个ssh公钥并添加到不同GitHub账号

在同一台电脑上操作多个 GitHub 账号的仓库 为每个账号生成独立的 SSH 密钥对&#xff0c;然后通过配置来区分使用。 步骤&#xff1a;为每个账号生成独立的 SSH 密钥&#xff1a; ssh-keygen -t ed25519 -C "your-email1example.com" -f ~/.ssh/id_ed25519_personal…

作者头像 李华
网站建设 2026/6/9 16:33:28

【大模型预训练】14-预训练过程详解:多阶段训练与课程学习(Curriculum Learning)策略

引言预训练过程在机器学习领域扮演着至关重要的角色&#xff0c;尤其是在深度学习模型的开发中。预训练是指在使用特定任务数据进行精细调整之前&#xff0c;先在大规模数据集上对模型进行训练的过程。这一步骤不仅能够显著提升模型的泛化能力&#xff0c;还能有效减少训练所需…

作者头像 李华