数据结构
文章平均质量分 50
小霖同学onism
这个作者很懒,什么都没留下…
展开
-
1.6 链表(数组模拟链表)
(这里不能用Idx作为截止条件,因为最增删之后,不知道idx是否还在,所以直接在链表中看,虚拟左端点0的右边就是起始条件,右端点1是终止条件)单链表只能看到后面一个,不能看到前面一个点,所以在o(n)时间复杂度内只能在第k个点后面插入,不能在第k个位置插入。在第2个点后面插入一个值为6的点:e[idx] = 6, ne[idx] = ne[2], ne[2] = idx。第1个点,值 e[1] = 3 指针 ne[1] = 2。第2个点,值 e[2] = 2 指针 ne[2] = 3。原创 2024-05-15 15:06:11 · 363 阅读 · 0 评论 -
1.5链表(环形链表)
快指针走2步,慢指针一次走一步,那相当于慢指针不动,快指针每次一步靠近慢指针,所以一定会相遇,如果快指针是走3步,相对于慢指针是走2步,可能就会错过。相遇之后,再来两个指针,一个从head出发,一个从相遇点出发,这两个指针一次一步,相遇时即是入口x的位置。次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体为走的次数小于 2n。n大于等于1,x = n(y+z)-y = (n-1)(y+z)+z。时间复杂度: O(n),快慢指针相遇前,指针走的。空间复杂度: O(1)原创 2024-05-12 14:42:21 · 139 阅读 · 0 评论 -
1.4 链表(链表相交)
这里相交是末端相交,即不会出现中间相交后面又分开的情况的。长度不一样不知道哪个和哪个比较,所以利用指针,移动到。原创 2024-05-11 23:03:46 · 143 阅读 · 0 评论 -
1.3 链表(删除链表的倒数第 N 个结点)
两个指针fast和 slow,fast先走n步,之后两个一起走。直到fast到达最后一个结点,slow指向待删除的前一个结点。待删除slow->next.需要返回头结点,所以最好还是用虚拟头结点。(不用单独考虑头结点被删)时间复杂度: O(n)空间复杂度: O(1)原创 2024-05-11 22:25:55 · 101 阅读 · 2 评论 -
1.2 链表(两两交换链表中的节点)
1、头处和中间处举例发现操作不一样,增强普适性 2、头结点会变,为了最后直接head = dummyhead->next)力扣24 https://leetcode.cn/problems/swap-nodes-in-pairs/description/1 2 3 4变成2 1 4 3。下一轮,cur要指向第二个位置就是新的1的位置,才能处理下轮的4个,变成 2->1 1->3 dummyhead ->2。加入虚拟头结点之后就发现一共是4个结点之间的关系。时间复杂度:O(n)空间复杂度:O(1)原创 2024-05-11 22:03:00 · 147 阅读 · 2 评论 -
1.1链表(翻转-双指针|递归)
初始化两个指针 cur (head) pre(null),遍历结束的时候pre指向最后一个,cur指向Null,不需要再反转指向啦、tmp临时保存cur的下一个节点,不然先反转cur之后就找不到了。力扣206 https://leetcode.cn/problems/reverse-linked-list/直到有一个return.注意两处reverse传参,思路来自于双指针。时间复杂度: O(n)空间复杂度: O(1)原创 2024-05-11 20:51:16 · 171 阅读 · 2 评论 -
一、链表笔记
口诀:插入先连后再前,删除留前连后后;(插入的时候需要先连后面,把原本的下一个cur->next给newnode->next,再更新cur->next为newnode;删除的时候cur是删除位置index的前一个,删的是cur->next,这样才能把后后的cur->next->next连到cur上,最后delete完手动nullptr一下指针。遍历时得由一个新指针 cur,不然head遍历完找不回头了。链表节点定义。原创 2024-05-11 16:51:54 · 298 阅读 · 1 评论