返回顶部

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也试过了还是不行)

 

posted @   YuhangLiuCE  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示