一、PTA题目集:
普遍问题:
1.链表不知道如何建立。
2.将所有代码写入main函数里,没有函数思想。
3.链表的部分基本操作不熟练。
4-1 删除单链表偶数节点
1、链表节点不知道如何删除。
4-3 链表逆置
1、不懂得如何输入到-1时结束输入。
2、不知道逆置的方法。
4-4 求链表的倒数第m个元素
1、代码十分复杂很难实现题目要求的时间复杂度尽可能小。
4-6 单链表的基本操作
1、基本操作不够熟练,需要借助外力帮助。
5-4 一元多项式的乘法与加法运算。
5-5 两个有序链表序列的合并
主要链表的插入和建立问题
二、链表学习总结 陈星源:难容有点难,不是很好掌握,还是要再多花一点时间,不然跟不上。
陈剑波:对新的内容掌握不是很熟练,在一些细节方面还是会出现错误,和一些不理解的东西。
苏志颖:链表的部分格式做不到规范,有的地方出错也不清楚问题所在
刘思远:知识点较模糊,实际操作起来会很困难。
张书阳:不会写
陈锦霞:大致掌握一些基本操作,但是在很多地方还需要与其他人沟通才可以实现
张恒:难,写不出来。
宾钧荣:不是很懂新教的这些东西
陈伟杰:感觉很懵。
林鹏:写不出来。
三、小组未解决问题
1.4-1 删除单链表偶数节点 DevC++能正常运行但是在pta只有十分,具体怎么修改?代码如下:
//遍历链表:遇到偶数节点就让上一个节点指向下下个节点
struct ListNode *createlist()
{
struct ListNode *p,*h,*q;
p=q=(struct ListNode*)malloc(sizeof(struct ListNode));
h=(struct ListNode*)malloc(sizeof(struct ListNode));
int data; //存放数据
h=p; //h为头节点
scanf("%d",&data);
while(data!=-1)
{
p->data=data; //保存数据
q->next=p; //p指向下一个节点
q=p;
p=(struct ListNode*)malloc(sizeof(struct ListNode));
scanf("%d",&data);
}
q->next=NULL; //尾节点Next指向空
free(p);
return h;
}
struct ListNode *deleteeven( struct ListNode *head )
{
struct ListNode *p,*q;
p=q=(struct ListNode*)malloc(sizeof(struct ListNode));
p=head;
q->next=p;
while(p!=NULL)
{
if(!(p->data%2)) //能被二整除的为偶数
{
if(p==head) //如果p是第一个节点就删除头节点,保留头指向的下一个节点作为头
{
head=head->next;
p=head;
q->next=p;
continue;
}
q->next=p->next; //直接跳过偶数节点
}
q=p;
p=p->next;
}
free(p);
return head;
}
2.4-3 链表逆置
DevC++能正常运行但是在pta显示部分正确,具体怎么修改?代码如下:
//每个节点都插入头节点之前 struct ListNode *reverse( struct ListNode *head ) { struct ListNode *p,*q,*y; //y指向头,q下一个节点就是p int i=0; p=q=y=(struct ListNode *)malloc(sizeof(struct ListNode)); y=head; p=head->next; q=head; while(p!=NULL) { q->next=p->next; //p下一个节点改为y,q下一个节点改为原p下一个节点 p->next=y; y=p; p=q->next; } head=y; return head; }
3.当在一个函数内申请内存,且最后在free后,有时会导致main里打印出错,为什么有时不能free?
4.大部分同学反映自己对数据结构很难接受,上周由于作业,物理实验等因素留给编程的时间并不多,链表这块内容有点落下,加上c语言的基础不是很好,往往在pta上一题要花费几个小时的时间还没法完成,会对编程产生厌倦。