这个题目是前几天一个好友分享给我的,但是因为时间原因没有及时写成文章。

这是他参加MTK笔试的题目

题目如下:

MTK笔试1题~_软件开发

网友提供的代码如下:

#include "stdio.h"

typedef struct n{
int data;
struct n* next;
struct n* pre;
}*pnode;


int main(){

pnode head = (pnode)malloc(sizeof(struct n) );
pnode preNode = head ;

int tmpVal;
while(1){

scanf("%d",&tmpVal);

pnode node = (pnode)malloc(sizeof(struct n));
node->data = tmpVal;
node->next = NULL;
node->pre = preNode;
preNode->next = node;
preNode = node;


if(getchar() == '\n'){
break;
}


}

int willbeadd;
scanf("%d",&willbeadd);
pnode addNode = (pnode)malloc(sizeof(struct n));
addNode->data = willbeadd;
// 这两行一开始没写,怀疑是第一个测试用例卡在这了
addNode->next = NULL;
addNode->pre = NULL;

pnode cur = head->next;
pnode pre02 = head;
while(cur != NULL && cur->data < addNode->data){
pre02 = pre02->next;
cur = cur->next;
}

if(cur != NULL){
addNode->next = cur;
addNode->pre = pre02;
cur->pre = addNode;
pre02->next = addNode;
}else{
pre02->next = addNode;
addNode->pre = pre02;
}



cur = head->next;
while(cur->next != NULL){
printf("%d ",cur->data);
cur = cur->next;
}
printf("%d",cur->data);

cur = head;
pnode nextNode = cur->next;
while(cur != NULL){
free(cur);
cur = nextNode;
if(nextNode != NULL){
nextNode = nextNode->next;
}
}

return 0;
}

然后,我运行了下,发现有问题

MTK笔试1题~_链表_02

输入 5 的时候,竟然卡死在这里不动了。

我本来以为程序有问题了,后面仔细看来下,应该是中文回车和英文回车的原因。

MTK笔试1题~_软件开发_03

如果修改成英文输入是没有问题的

MTK笔试1题~_软件开发_04

先解释下这个程序,前面赋值就没有啥好说的了,关键是查找的位置

在脑子里面要有一个双链表的图

MTK笔试1题~_链表_05

如果向一个双链表中插入数据,我们需要这样操作

MTK笔试1题~_软件开发_06

向链表中插入数据的核心代码如下

/*找到位置,把新数据插入链表中*/
while(cur != NULL && cur->data < addNode->data){
pre02 = pre02->next;
cur = cur->next;
}

if(cur != NULL){/*如果找到的位置在中间*/
addNode->next = cur;
addNode->pre = pre02;
cur->pre = addNode;
pre02->next = addNode;
}else{/*如果位置在双向链表的最后面*/
pre02->next = addNode;
addNode->pre = pre02;
}

然后之后的代码就是打印输出和释放内存了。

但是有点问题的是,因为这个题目没有题目的链接,不能直接验证写的答案是否完全正确,读者们可以看看这份代码,如果代码有问题,欢迎评论指正。


推荐阅读:

​专辑|Linux文章汇总​

​专辑|程序人生​

​专辑|C语言​

​我的知识小密圈​

关注公众号,后台回复「​1024​」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

MTK笔试1题~_数据可视化_07

MTK笔试1题~_数据可视化_08

嵌入式Linux

微信扫描二维码,关注我的公众号