![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode之链表篇
文章平均质量分 80
向着五星的方向
阿里云专家博主,华为云云享专家,专注于Java全栈,大数据方向,欢迎大家三连,有事可以私聊!
展开
-
刷题之Leetcode142题(超级详细)
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。为什么fast 走两个节点,slow走一个节点,有环的话,一定会在环内相遇呢,而不是永远的错开呢。原创 2024-04-23 15:56:43 · 713 阅读 · 0 评论 -
刷题之Leetcode160题(超级详细)
此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。这里兄弟们要注意,交点不是数值相等,而是指针相等。为了方便举例,假设节点元素数值相等,则节点指针相等。注意,函数返回结果后,链表必须 保持其原始结构。力扣题目链接(opens new window)简单来说,就是求两个链表交点节点的。原创 2024-04-22 09:06:07 · 396 阅读 · 0 评论 -
刷题之Leetcode19题(超级详细)
双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。首先这里我推荐大家使用虚拟头结点,这样方便处理删除实际头结点的逻辑,如果虚拟头结点不清楚,可以先去看一看这一篇。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2], n = 1 输出:[1]力扣题目链接(opens new window)进阶:你能尝试使用一趟扫描实现吗?思路是这样的,但要注意一些细节。原创 2024-04-17 15:41:02 · 746 阅读 · 0 评论 -
刷题之Leetcode24题(超级详细)
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。力扣题目链接(opens new window)对虚拟头结点的操作,还不熟悉的话,可以看这篇。接下来就是交换相邻两个元素了,这道题目正常模拟就可以了。原创 2024-04-15 09:23:52 · 374 阅读 · 0 评论 -
刷题之Leetcode206题(超级详细)
关键是初始化的地方,可能有的同学会不理解, 可以看到双指针法中初始化 cur = head,pre = NULL,在递归法中可以从如下代码看出初始化的逻辑也是一样的,只不过写法变了。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。递归法相对抽象一些,但是其实和双指针法是一样的逻辑,同样是当cur为空的时候循环结束,不断将cur指向pre的过程。原创 2024-04-14 22:59:41 · 604 阅读 · 0 评论 -
刷题之Leetcode203题(超级详细)
这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。那么因为单链表的特殊性,只能指向下一个节点,刚刚删除的是链表的中第二个,和第四个节点,那么如果删除的是头结点又该怎么办呢?移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。来看一下,如何移除元素1 呢,还是熟悉的方式,然后从内存中删除元素1。依然还是在这个链表中,移除元素1。原创 2024-04-10 14:44:37 · 986 阅读 · 0 评论