既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
例如下面的链表,这个链表复制得到的链表除了每个节点的地址与此链表不同,其他部分必须与这个链表完全相同。
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
解题思路
此题对时间复杂度和空间复杂度都有了限制,因此不能采用暴力求解的方式。
难点:节点的 random 指针是指向随机的节点,不能使用传统思维模式,所以原始的拷贝链表的方法如果用在这里的话,可能无法处理后续问题。
对于此题采用的方法如下:
- 拷贝所有节点,放在对应原节点的后面。
- 将每个 random 指向对应的位置。
- 将复制的链表解下来,尾插到一起,并将原链表恢复。
每个阶段使用完 cur 都要记得将 cur 置为 head 。
1、拷贝所有节点,并放在对应原节点的后面
每次开辟节点复制并直接尾插在原节点后面即可。
2.将每个 random 指向对应的位置。
当将每个节点的复制节点尾插在原节点的后面之后,那么原节点的 random指向的位置的下一个节点,就是复制后节点的 random 指针要指向的位置。
3.将复制的链表解下来,尾插到一起,并将原链表恢复
先将复制的链表解下来
定义两个链表 copyhead copytail,copyhead 记录新链表的头节点,copytail 负责维护新节点尾插。用copytail 维护尾插的好处是不用每次循环找尾,只需要每次 copytail 后移即可。
然后再将原链表恢复,恢原链表只需要将链表的 next 指向下一个next就可以了。
源码
struct Node* copyRandomList(struct Node* head) {
struct Node* cur = head;
while (cur != NULL)
{
struct Node* copy = (struct Node*)malloc(sizeof(struct Node));
struct Node* next = cur->next;
copy->val = cur->val;
cur->next = copy;
copy->next = next;
cur = next;
}
cur = head;
while (cur != NULL)
{
struct Node* copy = cur->next;
if (cur->random == NULL)
copy->random = NULL;
else
{
copy->random = cur->random->next;
}
cur = copy->next;
}
cur = head;
struct Node* copyhead = NULL, * copytail = NULL;
while (cur != NULL)
{
struct Node* copy = cur->next;
struct Node* next = copy->next;
if (copytail == NULL)
{
copyhead = copytail = copy;
}
else
{
copytail->next = copy;
copytail = copytail->next;
}
cur->next = next;
![img](https://img-blog.csdnimg.cn/img_convert/329102f17eb42a8963d43a098e954bfc.png)
![img](https://img-blog.csdnimg.cn/img_convert/99df8f28e7daf2d92ee58ede9dfdb6b1.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
ps://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**