一组链表讨论
一、PTA题目集
1、链表逆置
1)因为不是新建链表,所以无法使用头插法来逆置。
解决方法:通过遍历结点,在遍历结点过程中,设置一个指针,用于记录先前遍历的结点,然后在依次编译的过程中修改其后继结点的next。
2、求链表的倒数第m个元素
1)因为不能改变链表,所以不能用逆置的方法。
解决方法:设置两个指针,先让一个指针开始遍历结点,遍历到m个元素之后第二个指针也开始遍历,当第一个指针遍历结束是第二个指针就是倒数第m个元素的位置。
二、链表学习总结:
1、小组成员1:C语言基础较差,对链表不熟悉。
2、小组成员2:课上能听懂但是没办法熟练的在课后作业里应用,希望老师上课多讲解些题目
3、小组成员3:有时会发生作业在pta上编译不通过,在vs上成功运行,有时vs编译不通过pta上显示答案正确,这是什么bug。
三、未解决的问题:
1、大部分同学pta未完成。
2、求链表的倒数第m个元素
ElementType Find( List L, int m )
{
int i=0;
List p,q;
p=L;
q=L;
if(m<1)
return ERROR;
while(p->Next!=NULL){
if(i==m){
p=p->Next;
q=q->Next;
}
else{
i++;
p=p->Next;
}
}
if(q->Data==NULL)
return ERROR;
else
return q->Data;
}
想利用两个指针,第一个指针移动到m位置的时候第二个指针开始移动,等第一个指针结束后第二个指针的位置就是倒数第m个元素,但是pta不通过。