求大佬看一下我這個洗掉鏈表下標為i的結點 哪里有問題。
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PNode;
struct Node {
int info;
PNode link;
};
typedef struct Node *LinkList;
typedef LinkList *PLinkList;
void createlink(PLinkList pclist, int n) //建立單鏈表 并賦初值
{
PNode p, q;
int i;
p = (PNode)malloc(sizeof(struct Node));
*pclist = p;
p->info = 1;
q = (PNode)malloc(sizeof(struct Node));
q->info = 2;
p->link = q;
p = q;
for (i = 3; i <= n; i++)
{
q = (PNode)malloc(sizeof(struct Node));
p->link = q;
q->info = i;
p = q;
}
p->link = NULL;
return;
}
void deletei_link(PLinkList pclist, int num)
{
PNode p, pre = NULL;
p = *pclist;
int count = 1;
while (count != num && p->link != NULL)
{
pre = p;
p = p->link;
count++;
}
pre->link =p->link;
free(p);
return;
}
int main()
{
int n; int num;
scanf_s("%d", &n);
PLinkList pclist = NULL;
createlink(pclist, n);
scanf_s("%d", &num);
deletei_link(pclist, num);
PNode w;
w = *pclist;
while (w != NULL)
{
printf("%d", w->info);
w = w->link;
}
return 0;
}
uj5u.com熱心網友回復:
解決了 main函式里面沒有給palist 分類空間。還有其他一些細節錯誤uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PNode;
struct Node {
int info;
PNode link;
};
typedef struct Node *LinkList;
typedef LinkList *PLinkList;
void createlink(PLinkList pclist, int n) //建立單鏈表 并賦初值
{
PNode p, q;
int i;
p = (PNode)malloc(sizeof(struct Node));
if (!p)
exit(0);
*pclist = p;
p->info = 1;
q = (PNode)malloc(sizeof(struct Node));
if (!q)
exit(0);
q->info = 2;
p->link = q;
p = q;
for (i = 3; i <= n; i++)
{
q = (PNode)malloc(sizeof(struct Node));
p->link = q;
q->info = i;
p = q;
}
p->link = NULL;
return;
}
void deletei_link(PLinkList pclist, int num)
{
PNode p, pre = NULL;
p = *pclist;
int count = 1;
pre = *pclist;
while (count != num && p->link != NULL)
{
pre = p;
p = p->link;
count++;
}
if (count != num) {
printf("Can't find it !\n");
return;
}
if (p == *pclist) {
*pclist = (*pclist)->link;
free(p);
return;
}
pre->link =p->link;
free(p);
return;
}
int main()
{
int n; int num;
scanf_s("%d", &n);
//scanf("%d", &n);
LinkList pclist = NULL;
createlink(&pclist, n);
scanf_s("%d", &num);
//scanf("%d", &num);
deletei_link(&pclist, num);
PNode w;
w = pclist;
while (w != NULL)
{
printf("%d", w->info);
w = w->link;
}
}
供參考~
樓主的代碼沒有考慮到洗掉第一個節點以及count != num時,即沒有符合要洗掉的情況~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115974.html
標籤:C語言
下一篇:C++面向物件程式設計問題求解
