我已經用C語言編寫了一個代碼,它將創建一個鏈接列表。鏈表結構有兩個字段,即data
和next
; data
包含整數數據,next
是一個結構指針。鏈接列表 - 刪除包含素數的節點
該程序要求用戶輸入數據到列表中。一旦輸入數據,程序將通過列表並檢查節點中的哪些數據包含素數。如果它找到一個這樣的節點,它將刪除它並將下一個節點鏈接到前一個節點,但是我得到了分段錯誤錯誤,我無法解決。
我將下面的代碼。 你能不能幫我解決問題,因爲我不知道如何發現問題?
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
typedef struct node *nptr;
nptr H, h, n;
void deletetheprime(struct node**);
void display();
int prime(int);
int main() {
nptr temp1, temp;
int i, N, p;
printf("\n if list is completed enter 999\n");
for (;;) {
printf("\n enter the data \n");
scanf("%d", &i);
if (i == 999)
break;
else
if (H == NULL) {
H = h = (nptr)malloc(sizeof(struct node));
H->data = i;
H->next = NULL;
} else {
n = (nptr)malloc(sizeof(struct node));
n->data = i;
n->next = NULL;
h->next = n;
h = n;
}
}
printf("\n data before deletion\n");
display();
temp = H;
while (temp != NULL) {
N = temp->next->data;
p = prime(N);
if (p == 1) {
deletetheprime(&temp);
} else {
temp = temp->next;
}
}
printf("\n the data after deletion is\n");
display();
return 0;
}
void deletetheprime(struct node **temp2) {
nptr temp, temp1;
temp = *temp2;
temp1 = temp->next;
temp->next = temp->next->next;
free(temp1);
temp = temp->next;
}
int prime(int i) {
int j, p = 0;
for (j = 2; j <= i/2; i++) {
if (i % j == 0) {
break;
}
}
if (j > i/2) {
p = 1;
}
return p;
}
void display() {
nptr temp;
temp = H;
while (temp != NULL) {
printf("\n %d", temp->data);
temp = temp->next;
}
}
當你用調試器逐行執行代碼時,你觀察到了什麼? – user0042
「*請解決*」:SO不是調試服務。使用符號進行編譯,在調試器中運行代碼,逐行跟蹤程序,檢查相關變量的值以瞭解真正正在進行的操作。如果出現*特定*問題,請隨時返回此處。 – alk