网站建设学习东西自然志wordpress
web/
2025/9/27 1:44:56/
文章来源:
网站建设学习东西,自然志wordpress,做阿里巴巴网站公司,网站建设公司长春#x1f339;个人主页#x1f339;#xff1a;喜欢草莓熊的bear #x1f339;专栏#x1f339;#xff1a;数据结构 目录
前言
一、相交链表
题目链接
大致思路
代码实现
二、环形链表1
题目链接
大致思路
代码实现
三、环形链表2
题目链接
大致思路
代码实… 个人主页喜欢草莓熊的bear 专栏数据结构 目录
前言
一、相交链表
题目链接
大致思路
代码实现
二、环形链表1
题目链接
大致思路
代码实现
三、环形链表2
题目链接
大致思路
代码实现
总结 前言 通过一些例题来复习一下之前学习的链表。 一、相交链表
题目链接
相交链表 大致思路
用两个指针来遍历两个链表存在相同则就有相交注意这里相同的地址或者是指针相同不可以判断指针里面的值是否相同。我们要让两个表在相同位置进行遍历、找相同操作。很简单我们用计数操作来计入链表长度让长的走了距离差再让他们同时走。这里计算距离差我们要调用一下绝对值函数abs。代码里面还运用了假设法假设谁为长链表假设不成立就调换一下就可以了这里假设法值得体会一下。
代码实现
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode* curA headA;struct ListNode* curB headB;int A0;int B0;while(curA-next){curAcurA-next;A;}while(curB-next){curBcurB-next;B;}if(curA!curB){return NULL;}int juli abs(A-B);struct ListNode* llong headA;struct ListNode* sshort headB;if(AB){llong headB;sshort headA;}while(juli--){llongllong-next;}while(llong!sshort){llongllong-next;sshortsshort-next;}return llong;
}
二、环形链表1
题目链接
环形链表1 大致思路
本地要求我们判断是否是一个带环链表带环会存在循环用快慢指针来解决这题。fast指针走两步slow走一步。他们会相遇吗我画图证明一下我这里证明的是fast走两步slow走一步的情况其他情况大家可以尝试证明。
结论带环了一定会相遇代码实现很简单。 代码实现
bool hasCycle(struct ListNode *head)
{struct ListNode *fasthead;struct ListNode *slowhead;while(fast fast-next){fastfast-next-next;slowslow-next;if(slow fast){return true;}}return false;
}
三、环形链表2
题目链接
环形链表2 基于带环链表衍生出来的先判断是否带环带环了还要返回入环的第一个节点。
大致思路
与上一题环形链表相似还要返回第一个入环节点。这里先给上一个结论让相遇指针的下一个节点和头指针同时走他们就会在第一入环的节点相遇。我们看作一个相交链表返回相交节点的问题来做直接调用前面写的函数就可以了。 让我来证明一下 运用了一下数学公式等到关系式证明了。
代码实现
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode* curA headA;struct ListNode* curB headB;int A0;int B0;while(curA-next){curAcurA-next;A;}while(curB-next){curBcurB-next;B;}if(curA!curB){return NULL;}int juli abs(A-B);struct ListNode* llong headA;struct ListNode* sshort headB;if(AB){llong headB;sshort headA;}while(juli--){llongllong-next;}while(llong!sshort){llongllong-next;sshortsshort-next;}return llong;
}
struct ListNode *detectCycle(struct ListNode *head)
{struct ListNode *fasthead;struct ListNode *slowhead;while(fast fast-next){fastfast-next-next;slowslow-next;if(slow fast){struct ListNode* newnode slow-next;slow-nextNULL;return getIntersectionNode(head,newnode);}}return NULL;
} 总结 这些都题还不错值得我们掌握。加油加油请持续关注bear
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81311.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!