链表
baj001
这个作者很懒,什么都没留下…
展开
-
关于虚拟头结点笔记
在移除链表中的某元素的题中使用了虚拟头结点在反转链表中没有使用虚拟头结点因为反转链表,若使用了虚拟头结点,则反转后的最后一个节点即 (原来的头结点 ① 之后不再是null,而是dummy节点了,不满足链表的要求)在两两交换头结点的题中,也是用了虚拟头结点因为交换了之后,dummy 不再是指向① 而是指向了②,并不冲突...原创 2022-03-24 09:48:42 · 591 阅读 · 0 评论 -
如何理解链表
总结等号 左侧理解为钩子等号 右侧理解为环(也就是具体的位置)举例例如:链表 dummyNode–> 1 --> 2–> 3–> 4–>5虚拟头结点是dummyNode,或者是pre,head结点是1例1:如何理解 ListNode tmp = head.next.next;??则,head.next.next 就是结点3,因为head.next 可以理解为结点2例2:如何理解 pre.next = head.next; ?可以理解为:将pre指向原创 2022-03-03 12:27:19 · 648 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
原题链接实现过程如下(动图来源代码随想录)首先寻找快慢指针相遇的地方然后让慢指针固定此处,快指针指向了head然后while(fast != slow)的时候,不停地移动两个指针,直到相遇返回slow或者fast都可以二刷:一开始的时候,一定要判断 fast == null || fast.next == null 的情况,否则会报空指针异常public class Solution { public ListNode detectCycle(ListNode head) .原创 2022-03-03 12:07:08 · 270 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
原题链接使用虚拟头结点图中的cur 即为程序中的dummyNode如何理解链表??例如:链表 dummyNode–> 1 --> 2–> 3–> 4–>5虚拟头结点是dummyNode,或者是pre,head结点是1例1:如何理解ListNode tmp = head.next.next;??则,head.next.next 就是结点3,因为head.next 可以理解为结点2例2:如何理解 pre.next = head.next; ?可以理解为:原创 2022-03-03 10:47:20 · 193 阅读 · 0 评论 -
leetcode 203 移除链表元素
leetcode203 移除链表元素思路:使用虚拟头节点首先判断是否为空,若为空则直接返回head定义一个dummy,定义pre节点指向dummy,cur节点指向head当cur非null时,开始判断cur的val是否是要删除的val若是则 执行 pre.next = cur.next; 含义是让pre指向cur的指向 代表将本节点跳过若不是,则将cur节点直接赋值给pre节点之后将cur指向下一个位置 cur = cur.next;class Solution { public原创 2022-01-12 11:47:42 · 141 阅读 · 0 评论 -
leetcode 206 反转链表
leetcode 206 反转链表思路思路:要定义pre和tmp两个辅助节点 都置为空当cur非空的时候,使用tmp来保存cur.next然后将cur.next指向pre以上完成了反转操作执行pre = cur 将 cur = tmp 实现了向后连续操作 class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode tmp = nul原创 2022-01-12 17:49:43 · 176 阅读 · 0 评论 -
leetcode 19 删除链表的倒数第 N 个结点
leetcode 19 删除链表的倒数第 N 个结点思路首先定义虚拟头节点dummy定义查找倒数第n个节点的函数findFromEnd,传参数 (dummy,n+1)findFromEnd函数返回指定节点,假定为x,执行 x.next = x.next.next 删除了指定的节点后面的节点,被删除的节点就是题目中要删除的节点在find函数中,定义p1 和 p2 两个点来寻找某个点,这里的关键是,比如在主函数中定义的是要寻找倒数第2个节点,但是在我的findFromEnd函数中,传参的是第n+1原创 2022-01-14 12:07:15 · 139 阅读 · 0 评论 -
leetcode 160 相交链表
思路原题链接使用双指针对于相交链表问题,首先判断两个链表是否为空让pA pB 分别指向两个链表的头节点while(两个指针没有重合的时候)判断 指针是否是到了尾部:到了 :让指针指向另一个链表的头节点没到 : 指向下一个节点public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB原创 2022-01-23 08:53:50 · 172 阅读 · 0 评论