链表删除节点时,程序终止
我有个链表删除节点的问题,删除节点时,程序运行终止我找不出问题在那里,找了好久找不出原因所在
run.rar
(18.59 KB)
源代码如下:
程序代码:
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct student) struct student *creat(void); void print(struct student *head); struct student *del(struct student *head, long num); struct student { long num; float score; struct student *next; }; int n; int main() { struct student *head, *stu; long del_num; printf("input records:\n"); head = creat(); print(head); printf("\ninput the deleted number:"); scanf("%ld,&del_num"); head = del(head,del_num); print(head); return(0); } struct student *creat(void) { struct student *head; struct student *p1,*p2; n = 0; p1 = p2 = (struct student *)malloc(LEN); scanf("%ld,%f",&p1->num,&p1->score); head = NULL; while(p1->num != 0) { n = n + 1; if(n == 1) head = p1; else p2->next = p1; p2 = p1; p1 = (struct student *)malloc(LEN); scanf("%ld,%f",&p1->num,&p1->score); } p2->next = NULL; return(head); } void print(struct student *head) { struct student *p; printf("\nNow, These %d records are:\n",n); p = head; if(head != NULL) do { printf("%ld \t%5.1f\n", p->num, p->score); p = p->next; } while(p != NULL); } struct student *del(struct student *head, long num) { struct student *p1,*p2; if(head == NULL) {printf("\nlist null!\n"); return(head); } p1 = head; while(num!=p1->num && p1->next!=NULL) {p2=p1;p1=p1->next;} if(num == p1->num) {if(p1 == head) head=p1->next; else p2->next = p1->next; printf("delete:%ld\n",num); n=n-1; } else printf("%ld not been found!\n", num); return(head); }