既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
**输入:**l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4】
**示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]**
### 思路及图解
![](https://img-blog.csdnimg.cn/4b2327e3b6544f8b9bd5d4a5a5dcf874.png)
将两个链表的节点逐个比较,小的尾插到新链表的后面,每次尾插完,新链表和较小值的链表的指针都要向前走,有一个为空就停止循环,最后再将那个不为空的链表节点全部尾插到新链表。
### 需要额外注意的问题
>
> **要考虑一个链表为空的情况**
>
>
> **因为要尾插到新链表,所以要额外开辟一个哨兵位的空间,可以方便连续尾插,因为这样就可以不用改变头指针的指向。**
>
>
> **要及时释放哨兵位的空间**
>
>
> **在循环结束后要将没有遍历结束的链表继续尾插到新链表后面**
>
>
>
#### 核心代码
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode *head,tail;
head=tail=(struct ListNode)malloc(sizeof(struct ListNode));
if(list1NULL)
return list2;
if(list2NULL)
return list1;
while(list1&&list2)
{
if(list1->valval)
{
tail->next=list1;
list1=list1->next;
tail=tail->next;
}
else
{
tail->next=list2;
list2=list2->next;
tail=tail->next;
}
}
while(list1)
{
tail->next=list1;
list1=list1->next;
tail=tail->next;
}
while(list2)
{
tail->next=list2;
list2=list2->next;
tail=tail->next;
}
struct ListNode *del=head->next;
free(head);
return del;
}
## 链表分割
现有一链表的头指针 ListNode\* **pHead**,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
如图,给定的链表为 4-5-3-1-2-7 ,给一定值为 3,分割后的值为 1-2-4-5-3-7
![](https://img-blog.csdnimg.cn/860f63f869c1494da083c5d9aa9bcf8a.png)
### 思路及图解
创建两个带哨兵位的链表,分别存放值小于x的节点和值大于x的节点,将数据全部存放在这两个新链表之后,再将小于 x 的那个链表的尾节点指向 大于 x 的那个链表的第一个有效节点,最后将大于 x 的链表的尾节点的 next 置空。
![](https://img-blog.csdnimg.cn/13f0f70f6cd1466e86e43f4dfc2e6ba5.png)
![](https://img-blog.csdnimg.cn/2341cd68a2074e499ae187b25c41c567.png)
#### 核心代码
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
ListNode*tail2,*cur2,tail1,cur1;//哨兵位
tail1=cur1=(ListNode)malloc(sizeof(ListNode));//小于x的
tail2=cur2=(ListNode)malloc(sizeof(ListNode));//大于x的
while(pHead)
{
if(pHead->val<x)
{
cur1->next=pHead;
cur1=cur1->next;
}
else
{
cur2->next=pHead;
cur2=cur2->next;
}
pHead=pHead->next;
}
cur1->next=tail2->next;
cur2->next=NULL;
ListNode *del=tail1->next;
free(tail1);
free(tail2);
return del;
}
};
![img](https://img-blog.csdnimg.cn/img_convert/60bc2a37552be1f863e229a8d15f4e9a.png)
![img](https://img-blog.csdnimg.cn/img_convert/e784c4ec8f30a12843cb7c110d07769a.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**