- 博客(11)
- 收藏
- 关注
原创 【链表】单链表排序
分治即“分而治之”,“分“指的是将一大而复杂的问题划分成多人性质相同但是规模更小的子问题,子问题继续技照这样划分,直到问题可以被轻易解决,"治”指的是将子问题单独进行处理,经过分治后的子问题,需要将解进行合并才能得到原问题的解,因此整个分治过程经常用说归来实现。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指计(特殊情况甚至可以多个)》,两个指计或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。
2023-09-08 14:55:59
241
1
原创 【链表】两个链表相加
4、从头开始遍历两个链表,直到两个链表节点都为空,carry也不为1.每次取出不为空的链表节点值,为空就设置为0,将两个数字与carry相加,然后查看是否进位,将进位后的结果(对10取模)加入新的链表节点,连接在返回链表后面,并继续往后遍历。1、 任意一个链表为空,返回另一个链表就行了,因为链表为空相当于0,0加任何数为0,包括另一个加数为0的情况。2、反转两个待相加的链表,反转过程可以参考反转链表。3、设置返回链表的链表头,设置进位carry=0。5、返回前将结果链表再反转回来。
2023-09-07 18:10:01
246
原创 【链表】两个链表的第一个公共结点
使用两人指针 a,b分别指向两个鞋表 Head1,Head2的头结点,然后同时分别逐结点遍历,当 b 到达链表 pHead2 的末尾时,重新定位到链表 pHead1的头结点。当 a 到达链表 Head1的末尾时,重新定位到链表Head2的头结点;当双指针相遇时,所指向的结点就是第一个公共结点。
2023-09-07 16:52:26
98
原创 【链表】删除链表的倒数第n个节点
3、准备慢指针指向原始链表头,代表当前元素,前房节点指向添加的表头,这样两个指针之间相距就是一直都是n。4、快慢指针同步移动,当快指针到达链表尾部的时候,慢指针正好到了倒数n个元素的位置。5、最后将该节点前序节点的指针指向该节点后一个节点,删掉这个节点。1、给链表添加一个表头,处理删掉第一个元素时比较方便。2、准备一个快指针,在链表上先走n步。
2023-09-07 16:31:52
86
原创 【链表】链表中倒数最后k个节点
我们无法逆序遍历链表,就很难得到链表的倒数第k个元素,那我们可以试试反过来考虑,如果当前我们处于倒数第k的位置上,即距离链表尾的距离是k,那我们假设双指针指向这两个位置,二者同步向前移动,当前面个指针到了链表头的时候,两个指针之间的距离还是k。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指针(特殊情况甚至可以多个),两个指针或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。
2023-09-07 16:12:25
148
原创 【链表】判断链表是否有环
双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两人指针计(特殊情况甚至可以多个),两个指针或是同方向访问两人链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。我们可以用双指针技巧,同向访问的双指针,速度是快慢的,只要有环,二者就会在环内不断循环,且因为有速度差异,二者一定会相遇。4、如果链表有环,那快慢双指针会在环内循环,因为快指针每次走两步,因此快指针会在环内追到慢指针,二者相遇就代表有环。1、设置快慢两个指针,初始都指向链表头。
2023-09-07 10:17:18
62
原创 【链表】合并两个有序链表
1、如果head1指向的结点值小于等于head2指向的结点值,则将head1指向的结点值链接到cur的next指针,然后head1指向下一个结点值。般创建单链表,都会设一个虚拟头结点,也叫哨兵,因为这样每一个结点都有一个前驱结点。3、循环步骤1.2,直到head1或者head2为nullptr。4、将head1或者head2剩下的部分链接到cur的后面。初始化: 定义cur指向新链表的头结点。2、否则,让head2指向下一个结点值。
2023-09-06 16:13:30
244
1
原创 【链表】链表中的节点每k个一组翻转
1、每次从进入函数的头节点优先遍历链表k次,分出一组,若后续不足k个节点,不用反转直接返回头。3、这一组经过反转后,原来的头变成了尾,后面接下一组的反转结果,下一组采用上述递归继续。2、从进入函数的头节点开始,依次反转接下来的一组链表,反转过程同BM1.反转链表。
2023-09-06 15:39:28
208
1
原创 【链表】链表内指定区间翻转
1、在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就能保证第一个节点永远不会反转,不会到后面去。4、对于从m到n这些个位置的节点,依次断掉指向后续的指针,反转指针方向。2、使用两个指针,一个指向当前节点,一个指向前序节点。3、依次遍历链表,到第m个的位置。5、返回时去掉我们添加的表头。
2023-09-06 14:14:04
337
1
原创 【链表】反转链表
1、在遍历链表时,将当前节点的next 指针改为指向前一个节点。3、在更改引用之前,还需要存储后一个节点。最后返回新的头引用。2、节点没有引用其前一个节点,需事先存储其前一个节点。
2023-09-06 10:19:06
78
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人