1669
给你两个链表 list1
和 list2
,它们包含的元素分别为 n
个和 m
个。
请你将 list1
中下标从 a
到 b
的全部节点都删除,并将list2
接在被删除节点的位置。
第一遍
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2){ struct ListNode* beginning2=list2; struct ListNode* end2=list2; while(end2->next) end2=end2->next; struct ListNode* p=list1; struct ListNode* linka=list1; struct ListNode* linkb=list1; p=list1; while(p->next) {if(p->next->val==a) {linka=p; p=p->next;} else if(p->next->val==b) {linkb=p->next; p=p->next;} else {p=p->next;} } linka->next=beginning2; end2->next=linkb->next; return list1; }
第二遍 参考题解
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2){ struct ListNode* end2=list2; while(end2->next) end2=end2->next; struct ListNode* preA = list1; for (int i = 0; i < a - 1; i++) { preA = preA->next; } struct ListNode* preB = preA; for (int i = 0; i < b - a + 2; i++) { preB = preB->next; } preA->next=list2; end2->next=preB; return list1; }
和题解的思路是一样的 把要改的结点先找到
但是如何找
自己做的时候忽略了第一个链表的特点 即从0开始依次递增
没有利用这个特点 要把整个链表遍历完才能找到要的结点(找到第二个之后break也试过了还是不行)
Work Hard
But do not forget to enjoy life😀
本文来自博客园,作者:YuhangLiuCE,转载请注明原文链接:https://www.cnblogs.com/YuhangLiuCE/p/17080376.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)