✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
个人主页:@rivencode的个人主页
系列专栏:《牛客网刷题》
推荐一款模拟面试、刷题神器,从基础到大厂面试题点击跳转开启刷题模式
前言:
想要学好嵌入式,C语言与数据结构是必要熟练掌握的,而想熟练掌握一门语言,必须经过大量的练习,刷题,至少需要一两万行的代码量,才能具有一定的编程能力,至少拿到一个功能,怎么去用编程语言去实现它,从现在开始我要开启刷题之路,提高自己的编程水平,还有最重要的面试能力。
推荐一款刷题神器 -> 点击跳转进入网站(数据结构算法方向)
题目原型:
输入输出示例:
1.题目分析:题目意思很简单就是链表头尾交换,将整个链表反向连接起来,实现之后返回新链表的头结点。
2.解题思路:
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
if(pHead == NULL)
{
return NULL;
}
struct ListNode * n1=NULL,*n2=pHead,*n3=pHead->next;
while(n2 !=NULL)
{
n2->next=n1;
n1=n2;
n2=n3;
if(n3!=NULL)
n3=n3->next;
}
return n1;
}
struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
struct ListNode * cur=pHead;
struct ListNode * NewHead=NULL;
while(cur != NULL)
{
struct ListNode * next=cur->next;
//链表头插
cur->next=NewHead;
NewHead=cur;
cur=next;
}
return NewHead;
}
题目原型:
1.题目分析:
题目意思很简单就是返回链表中的中间结点,如果是奇数个结点那只有一个中间结点返回这个结点即可,如果是偶数个结点那就会有两个中间结点,题目要求返回第二个结点。
2.解题思路:
struct ListNode* middleNode(struct ListNode* head ) {
// write code here
struct ListNode* cur=head;
int count=0;
//求出结点数
while(cur !=NULL)
{
count++;
cur=cur->next;
}
//中间结点位置
count=count/2;
struct ListNode* middle=head;
//找出中间结点
while(count--)
{
middle=middle->next;
}
return middle;
}
struct ListNode* middleNode(struct ListNode* head ) {
// write code here
struct ListNode* slow=head,*fast=head;
while(fast !=NULL && fast->next !=NULL )
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}
如何刷题:
1.如果你是基础不太好,可以先按照题解,跟着手打代码,重点理解题目思路,将题目所用到的知识点,解题技巧提炼出来(锻炼代码能力,解题思路)。
2.当有一定的代码能力之后,但是看题还是没有思路,可以先看解题思路理解它,然后尝试用代码去实现它。(主要锻炼代码能力,进一步锻炼解题思维)
3.拿到一个题目自己先尝试解题,最好是能将解题思路用画图的方式体现出来,这样更能加深印象,然后用代码实现,实现之后再看看题解,或者别人的解题方法,进行对比,找到最优解题思路
最后:在解题过程中,碰到问题如下图(题目提交后通不过,报错(代码可能有bug),尽量独立思考,可以先尝试用它的测试用例,一步一步走读代码,看看问题出现在那个地方,如果实在是没有看出来,可以将该函数拷贝到VS中进行调试代码,一定能找出来。(锻炼自己的代码调试能力)
总结:
要想学好嵌入式C语言是根本,但是也离不开数据结构,尤其是链表、队列方面的知识,就接下来我要更新的freerots实时操作系统,就需要用到大量的链表和队列的知识,要想提高自己的编程水平,笔试能力和面试技巧,就得大量刷题手打代码 ->点击跳转进入网站(数据结构算法方向)