c语言-C语言问题 感觉自己是对的 但提交后总 Runtime error

问题描述

C语言问题 感觉自己是对的 但提交后总 Runtime error

描述:

已知a、b和c三个递增有序的链表,现在要求对a做如下操作:删除其中既即在b中出现又在c中出现的元素(注意同一表中的元素有可能重复)。

输入:

先在第一行输入3个小于100的正整数m,n,l分别表示链表a,b,c的长度,然后在第二行输入m个递增的正整数,第三行输入n个递增的正整数,第四行输入l个递增的正整数,分别为这三个链表的元素,

输出:

按顺序输出删除元素后的链表a的值,每个元素占一行。

输入样例:

3 8 5
23 47 88
2 5 7 9 47 47 88 99
10 20 30 40 47
输出样例:

23

88

我的代码:(很多数据都试过了,都没错啊!!!)
#include
#include
typedef struct List{
int data;
int length;
struct List *next;
} List;
List *LA,*LB,*LC;

void CreateLink(List **L,int length)
{
List p,*s;
p=*L=(List *)malloc(sizeof(List));
(*L)->length=length;
for(;length>0;length--)
{
s=(List *)malloc(sizeof(List));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
}
/*int GetLinkData(List *L,int n){
List *p;
int i=0;
p=L->next;
if(n> L->length -1) {
printf("输入位置错误!n");
return -1;
}
for(i=0;p!=NULL;i++){
if(i==n) return p->data;
p=p->next;
}
return 0;
}
/
int GetDataPosition(List *L,int value){
List *p;
int i=0;
p=L->next;
for(i=0;p!=NULL;i++){
if(p->data == value){
return i;
}
p=p->next;
}
return -1;
}
void DeleteLink(List *L,int n){
List *p = L->next;
List *s = L;
int i=0;
for(i=0;p!=NULL;i++){
if(i==n){
s->next=p->next;
free(p);
}
s=s->next;
p=p->next;
}

}

void PrintLink(List L)
{
List *p;
p=L->next;
while(p!=NULL)
{
printf("%dn",p->data);
p=p->next;
}
}
/*void InsertLink(List *L,int insert){
List *p=L->next;
List *s=L;
List *p2=(List *)malloc(sizeof(List));
p2->data=insert;
while(p!=NULL){
if(p->data >= insert){
p2->next=p;
s->next=p2;
return;
}
s=s->next;
p=p->next;
}
s->next=p2;
p2->next=NULL;
}
/
void ProcessLink(List *L1,List *L2,List *L3){
int i=0,t1=0,t2=0,d=0;
List *p = L1->next;
for(i=0;p!=NULL;i++){
d=p->data;
// printf("p-data %dn",d);
t1=GetDataPosition(L2,d);

// printf("在L2表中p-data的位置:%dn",t1);
t2=GetDataPosition(L3,d);
// printf("在L3表中p-data的位置:%dn",t2);
if(t1!=-1 && t2!=-1){
p=p->next;
DeleteLink(L1,i);
i--;
/*调试了好几天啊,链表删除一个节点之后总长度减一,如果i不自减,
因为GetDataPosition()都是每次遍历查找的,DeleteLink(L1,i)将会
删去你想要删去的后面那个节点*/
continue;
}
p=p->next;
}
}
void DestroyList(List *L)
{
List *p,*q;
p=L;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
L=NULL;
}
int main()
{
// freopen("input.txt","r",stdin);
int l1=0,l2=0,l3=0;
scanf("%d",&l1);
scanf("%d",&l2);
scanf("%d",&l3);
CreateLink(&LA,l1);
CreateLink(&LB,l2);
CreateLink(&LC,l3);
// PrintLink(LA);
ProcessLink(LA,LB,LC);
PrintLink(LA);
DestroyList(LA);
DestroyList(LB);
DestroyList(LC);
return 0;
}

解决方案

 void DeleteLink(List *L,int n){
    List *p = L->next;
    List *s = L;
    int i=0;
    for(i=0;p!=NULL;i++){
        if(i==n){
            s->next=p->next;
            free(p); //这里free p了,p就不能用了
        }
        s=s->next;
        p=p->next; 你还在访问p->next
    }

}

解决方案二:

http://www.pudn.com/downloads617/sourcecode/math/detail2511546.html

时间: 2024-09-17 03:54:56

c语言-C语言问题 感觉自己是对的 但提交后总 Runtime error的相关文章

c语言-C语言实现文件合并的问题

问题描述 C语言实现文件合并的问题 之前已经编写了一个程序,可以实现.txt的文件内容追加写,可是对两个视频操作的时候就行不通了.但是又不知道问题出现在哪里,视频能合并,文件大小是两个文件的和,可是新和成的文件内容只显示一个文件的内容.这个要怎么解决. 解决方案 视频文件不是简单两个文件叠加.视频文件包含复杂的结构,文件头部分指定了这个视频的格式,有多少帧,存储的偏移地址是什么你简单合并两个文件,播放器只知道根据第一个文件的文件头找数据,附加在后面的第二个文件是读不到的.你需要重新编码得到一个完

win7如何更改语言 电脑语言改成英文的方法

今年evad3rs团队发布的iOS 7完美越狱工具有些特殊,中国版iOS7完美越狱工具中,捆绑有太极助手插件,此插件类似流氓插件,容易导致iOS越狱设备出现白苹果现象(国外版无此插件).目前比较好的解决办法是:在使用电脑中越狱的时候,将电脑语言改为英文,可绕过该插件.但很多电脑小白用户还不知道如何更改电脑语言,因此本文将为大家详细介绍下电脑语言更改教程. 如何更改电脑语言 电脑语言改为英文方法 以下笔者以Windows 7系统截图演示,教大家如何更改电脑语言.其他XP或者Win8系统设置方法与此

单元测试-C语言 应该怎么修改宏定义 在函数5执行之后,打印错误error 函数6也能执行

问题描述 C语言 应该怎么修改宏定义 在函数5执行之后,打印错误error 函数6也能执行 这是函数5static char * test_replace(){Link_t head;head = LinkTable_new();Link_t temp3 =Link_replace(head101""cpp101"");int number4;if(temp3 != NULL){number4 =2;}else{number4 =0;}if(number4 == 1

c语言编程-C语言 oj 平台 runtime error 求解

问题描述 C语言 oj 平台 runtime error 求解 题:原文网址:http://vjudge.net/problem/viewProblem.action?id=19398输入:先输入一个数N,后每组2个(代表xy)输入N组数.(1<=N<=50)(-100<=xy<=100)输入0结束.输出:AB使得Ax+By!=0且Ax+By>0的数目与Ax+By<0的数目相同(-500<=AB<=500)如:Sample Input 2 -20 20 -3

c语言-C语言递归的内存释放问题

问题描述 C语言递归的内存释放问题 我用C语言实现alpha-beta极小极大算法来做一个棋类游戏的AI,博弈树是用递归的方式构造的,然后发现AI每下一步程序的内存都在增大,原来是因为递归没有释放内存. 耗内存的指针是棋盘 char ** chessboard; 于是我在递归函数的每一个return之前都把 chessboard 给释放了,发现内存还是一直在涨,求解.. 解决方案 把递归函数实现贴出来. 解决方案二: 估计释放的不全.二级指针要分两级释放. 解决方案三: 二级指针的释放是要分两步

安卓app多语言多语言切换

问题描述 安卓app多语言多语言切换 请问大神们可以帮助我吗?在我的程序里面我想实现多语言切换,调用系统的语言设置, 改变我自己的app语言,但是不改变系统的显示语言,这样怎么实现? 解决方案 http://blog.csdn.net/forrey/article/details/44547813 去这里看看说不定对你有帮助! 解决方案二: http://my.oschina.net/jack1900/blog/290694http://blog.csdn.net/cento123/articl

c语言-C语言的文件问题????????

问题描述 C语言的文件问题???????? 我如果想往C的文件里写入数据,我要事先手动建立一个.txt文件吗?还是有其他方法自动创建? 解决方案 O(NlgK)问题优先队列实现文件C语言C语言中头文件相互包含问题c语言中,文件路径读取问题 解决方案二: 不用手动建立文件的,c语言里有很多文件操作函数,可以自动建立文件,并可以写入你想写入的数据 解决方案三: 我也想提这样的问题.不过既然是C的文件,我觉得应该是创建.C文件吧,.TXT是文本格式的,估计是不行的. 解决方案四: c语言中可以通过代码

c语言-C语言的简单问题求解,谢谢了

问题描述 C语言的简单问题求解,谢谢了 ACM上一道简单的题Description计算:t=1-1/(2*2)-1/(3*3)-...-1/(m*m) Input整型变量m Outputt(保留六位小数) Sample Input10Sample Output0.450232 我的代码#include #include int main(){ int mn; float t=1; do{ scanf(""%d""&m); }while(m<1); fo

c语言-C语言:小白问一个问题

问题描述 C语言:小白问一个问题 代码如下 #include void search(float (*p)[4],int n) { int i,j,k; for(i=0;i<n;i++) { k=0; for(j=0;j<4;j++) if(*(*(p+i)+j)<60) k=1; if(k==1) { printf("the falied student numbers are No.%d ",i+1); for(j=0;j<4;j++) printf(&qu