网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
LNode\* insert\_sort(LNode \*p)
{
if(NULL == p) return p;
LNode \*tmp = NULL; //指向待排序节点,用于节点插入
LNode \*q = p, \*t = q->next;// q指向待排序节点的前一个节点,t指向待排序节点
while(t)
{
if(q->data < t->data)
{
tmp = t;
t = t->next;
if(t)
{
t->prev = q;
}
q->next = t;
while(q && (q->data < tmp->data))
{
q = q->prev;
}
if(q)
{
tmp->next = q->next;
q->next->prev = tmp;
q->next = tmp;
tmp->prev = q;
}
else
{
tmp->next = p;
tmp->prev = NULL;
p->prev = tmp;
p = tmp;
}
if(t)
{
q = t->prev;
}
}
else
{
t = t->next;
q = q->next;
}
}
return p;
}
- 归并排序
算法简介
归并排序采用分治思想,首先使其子序列成为有序序列,然后再对子序列进行归并。
递归实现:
- 首先把链表分割为两个子链表(采用快慢指针找到链表中间节点),递归该分割过程,直至子链表只包含一个节点为止;
- 创建一个新的链表节点,指向排序好的链表;对分割得到的两个子链表逐一遍历对比,值小的节点插入到新链表后面;
- 两个子链表归并完成,且已完成对其排序,返回链表头指针给上层递归。
算法实现
LNode *list_split(LNode *head) //分割链表,返回后一个子链表的头指针
{
if(NULL == head)
{
return head;
}
LNode *tmp = head;
LNode *slow = head, *fast = head; //快慢指针找到原链表的中间节点
while(fast)
{
fast = fast->next;
if(fast)
{
fast = fast->next;
}
if(NULL == fast)
{
break;
}
slow = slow->next;
}
tmp = slow;
slow = slow->next;//中间节点的下一个节点作为第二个子链表的头节点
tmp->next = NULL; //保证每个子链表尾指针都指向NULL
return slow;
}
LNode* merge(LNode *head1, LNode *head2)//对两个链表进行归并,合为一个有序链表
{
if(NULL == head1) return head2;
if(NULL == head2) return head1;
LNode head; //定义一个有序链表的头节点
LNode *tail = &head;
while(head1 && head2)
{
if(head1->data < head2->data) //将小节点插入到有序链表后
{
tail->next = head1;
head1 = head1->next;
}
else
{
tail->next = head2;
head2 = head2->next;
}
tail = tail->next;
}
if(head1) //剩下的节点要保证连接到有序链表后
{
tail->next = head1;
}
if(head2)
{
![img](https://img-blog.csdnimg.cn/img_convert/cd0dd13da336d4560d5743c8bc9d5099.png)
![img](https://img-blog.csdnimg.cn/img_convert/4fce03ffa3efefca12f6cea3d817f1c0.png)
![img](https://img-blog.csdnimg.cn/img_convert/1ed1e86e4ec9c3b50f0bb6976a3c9237.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**