链表
c葱c
这个作者很懒,什么都没留下…
展开
-
leetcode 19 删除链表的倒数第N个节点
步,然后快慢指针同时移动,当fast走到尽头,刚好此时的slow就会指向被删除的前一个指针。一开始并没有想到用双指针的思路来完成。代码如下:需要注意的是,双指针:定义两个指针,fast slow。原创 2023-03-18 13:58:03 · 23 阅读 · 0 评论 -
leetcode 707 设计链表
这里需要注意,要将需要释放的结点记录下来,这里用temp,之后就可以delete temp,否则会找不到已经链表逻辑里的结点。4.当获取元素的时候,cur需要指向当前需要的index所以,cur = dummyhead->next。5.每次遍历的时候,需要定义一个cur来帮助虚拟头节点进行遍历,这样头结点的值就不会改变,方便返回。后定义全局变量,是因为后面的每一个函数操作的都是同一个链表。,不然就是在局域内初始化了,无法作用到全局。3.增删元素的时候,需要找到index元素的。2.当添加结点时,需要注意。原创 2023-03-17 14:15:00 · 81 阅读 · 0 评论 -
leetcode 面试题 02.07. 链表相交
2.可以恒定 curA 指向的是结点数长的链表。当交换的时候,指针和数目都要跟着交换。一开始想的时候没有想到两个链表的交点会处在什么位置。1.需要计算出两个链表的结点数之差。这样才方便进行交换。原创 2023-03-18 14:47:59 · 35 阅读 · 0 评论 -
leetcode 142.环形链表II
因为快指针比慢指针快一步,也就是相对速度大一。那么在环内 快指针就是逐步追赶慢指针。但当快指针的速度为一次三个结点时,相对速度为2 ,就有可能跨过慢指针。针对第一个问题,采用快慢指针的思路。快指针fast,一次走两步。慢指针slow,一次走一步。需要用到一些数学推导。题中主要是让我们解决两个问题。第一个问题:怎样判断是否有环?第二个问题:怎样找到环的入口。快慢指针相遇时,则说明有环。原创 2023-03-18 16:57:59 · 38 阅读 · 0 评论 -
leetcode 206 反转链表
4.移动两个指针的顺序 先移动pre 后移动cur 否则,pre将找不到cur的位置。1.两个指针的初始化 cur = head pre = null。用递归的思路其实和双指针一样,只是写法不一样。3.temp来存储反转之前cur的下一个结点。思路:1. 双指针。原创 2023-03-17 15:36:10 · 38 阅读 · 0 评论 -
leetcode 24 交换结点
2. 交换的时候,注意在改变指针转向的时候,需要考虑到结点是否会丢失。如果结点会因为转向而丢失,则需要保存该结点。例如,当cur->next,已经为空,也就是 n 为偶数的情况。如果先去判断cur->next->next,如果 n 为奇数,则终止条件为 cur->next->next == NULL。如果 n 为偶数,则终止条件为 cur->next == NULL(在前。1.终止条件 这里考虑到了偶数和奇数。,否则可能会发生操作空指针的情况。就会发生操作空指针的情况。注意写终止条件的顺序。原创 2023-03-18 11:54:28 · 34 阅读 · 0 评论 -
leetcode 203 移除链表元素
创建一个新的结点让它指向头结点。这样做的原因是不用单独处理头结点,所有结点的处理方式都是一致的。一开始只想到了虚拟头结点的办法,没想到头结点和非头结点是需要如何进行操作的。返回的是 dummy head的下一个结点。原创 2023-03-17 10:20:55 · 26 阅读 · 0 评论 -
关于链表的总结
3.当遍历链表的时候,需要定义一个cur指针来遍历。当定义的时候,需要注意cur指针一开始究竟指向哪里。4.当链表的指针需要进行转向时,需要注意是否会有结点的丢失,如果有的话,需要将该结点保存下来。如果是对结点进行操作:cur = dummyhead 因为需要获取该结点的前一个结点的指针。5.删除一个结点的时候,需要手动释放内存。所以需要将需要删除的结点保存下来。如果是获取结点的值:cur = dummyhead->next。主要是方便统一对头结点操作,不用单独对头结点进行处理。1.虚拟头结点的使用。原创 2023-03-19 10:24:10 · 44 阅读 · 0 评论