中易网

C++:为什么编译没错,但就是运行不出结果呢?程序如下:

答案:3  悬赏:30  
解决时间 2021-03-24 15:22
#include <stdio.h>
#include <stdlib.h>
typedef struct node //自定义链表结构体
{
int data;
struct node *next;
}LNode ;
LNode *create(int n)
{
LNode *head,*p,*q;
int i,m;
p=(LNode*)malloc(sizeof(LNode));
p->next=NULL;
head=p; //建立头结点
printf("Please enter %d integers:\n",n);
for(i=1;i<=n;i++)
{
q=(LNode*)malloc(sizeof(LNode));
scanf("%d",&m); //输入链表的data值
q->data=m;q->next=NULL;
p->next=q;p=q;
}
return head;
}
int DeleteLink(LNode* head,int i)
{
LNode *p,*q;
int j=0;
p=head;
while((p!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(p==NULL) return 0;
q=p->next;
p->next=q->next;
free(q);
return 0;
}
Print(LNode *head,int m) //输出函数
{
LNode *p;
p=head;
printf ("\n");
while (p->next!=NULL)
{
p=p->next;
printf ("%d ",p->data);
}
return 0;
}
int main ()
{
int n,i;
LNode *head,*p;
p=(LNode*)malloc(sizeof(LNode));
p->next=NULL;
head=p;
LNode *create(int);
int DeleteLink(LNode *, int);
int Print(LNode *,int);
printf("How many nodes do you want in this linklist?\n");
scanf("%d",&n);
create(n);
printf("Which node do you want to delete?\n");
scanf("%d",&i);
DeleteLink(head,i);
Print(head,n-1);
return 0;
}
最佳答案
int main ()
{
int n,i;
LNode *head,*p;
//指针p没有用,这段可以注释掉
// p=(LNode*)malloc(sizeof(LNode));
// p->next=NULL;
// head=p;
LNode *create(int);
int DeleteLink(LNode *, int);
int Print(LNode *,int);
printf("How many nodes do you want in this linklist?\n");
scanf("%d",&n);
head = create(n); //原始代码返回的链表头指针没有复制给phead
printf("Which node do you want to delete?\n");
scanf("%d",&i);
DeleteLink(head,i);
Print(head,n-1);
return 0;
}

另外,给出的Print函数的定义有误,应该是前面忘记了返回类型int
全部回答
文件后缀你有没有 xx.c。
虽然不太清楚你想要啥,给你看看我的写法,希望对你有帮助: struct CListNode{  int d;  CListNode* next; }; struct CList{  int length;  CListNode* head; }; CList* CListNew(int n) {  CList* l = (CList*)malloc(sizeof(CList));  l->length = n;  l->head = NULL;  if (n > 0) {   l->head = (CListNode*)malloc(sizeof(CListNode));   l->head->next = NULL;   l->head->d = -1;  }  CListNode* p = l->head;  for(int i=1; i<n;i++) {   CListNode* q = (CListNode*)malloc(sizeof(CListNode));   q->next = NULL;   q->d = -1;   p->next = q;   p = q;  }  return l; } void CListDelete(CList* l) {  CListNode* p = l->head;  while (p != NULL) {   CListNode* q = p->next;   free(p);   p = q;  }  free(l); } bool CListRemove(CList* l, int index) {  CListNode* p = l->head;  CListNode* prev = NULL;  for(int i = 0; i < index; i++) {   prev = p;   p = p->next;  }  if (p == NULL)  { return false; }  if (prev == NULL)  { l->head = p->next; }  else  { prev->next = p->next; }  free(p);  l->length -= 1;   return true; } void CListInput(CList* l) {  CListNode* p = l->head;  while (p != NULL) {   scanf("%d", &p->d);   p = p->next;  } } void CListPrint(CList* l) {  CListNode* p = l->head;  printf("[");  if (p != NULL) {   while (true) {    printf("%d", p->d);    p = p->next;    if (p == NULL) {     break;    }    printf(",");   }  }  printf("]"); } int main() {  CList* l = CListNew(3);  CListInput(l);  CListRemove(l,1);  CListPrint(l);  CListDelete(l);  return 0; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
6s怎么开启飞行模式不关闭wifi
2个月的宝宝耳朵流黄水
广州市海珠区童心幼儿园怎么样
谁唱的二人转好听
霹雳布袋戏中为什么素还真的外号是“大饼”,
大学城至双碑嘉陵江大桥私家车怎么走
郑州市哪里小吃好吃??
六年级译林般的英语第一课的过去式和动词有哪
氯化铁和铜丝的反应方程式
馋掉牙花甲粉也是万客旗下的吧?
现在不知道学udk还是ue4.好纠结 有没有人说说
网络代理加盟,他们代签合同!然后合同原件发
宽屏怎么设置
冬至数头九,是夏至数头伏吗?
芳草碧连天的深意
推荐资讯
人类是生物中的重要组成部分
我家仓鼠,尾巴周围总是湿湿的……详细情况如
吉娃娃狗一开始肚子胀气,过了二三天 小便像
网上下载的true type 字体文件, 怎么安装到w
是去大的民营生产制造业做销售会计?还是去一
介绍一下南京人的生活习惯以及天气情况
高三学生晚上熬夜 白天怎样才会有精神
1.检验某气体是二氧化碳的方法是()化学方程式
在京东买了一条裤子,他给我寄错款式了,我先
吉林省白山在北京延庆的什么方向
箱装酸菜走高速收费吗
眼睛视力4点1左右,有机会恢复吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?