函数readlist
从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
函数deletem
将单链表L
中所有存储了m
的结点删除。返回指向结果链表头结点的指针。
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);
return 0;
}
struct ListNode *readlist(){
int num;
struct ListNode *p = NULL,*pr = NULL,*head = NULL;
while(1){
scanf("%d",&num);
if(num==-1)
break;
p = (struct ListNode *)malloc(sizeof(struct ListNode));
p->data = num;
if(head==NULL){
head = p;
}
else{
pr->next = p;
}
pr = p;
}
p->next = NULL;
return head;
}
struct ListNode *deletem( struct ListNode *L, int m )
{
struct ListNode *p = NULL,*pr=NULL;
while (L != NULL && L->data==m){
p = L;
L = L->next;
free(p);
}
if (L == NULL){
return NULL;
}
p = L;
pr = p->next;
while (pr != NULL){
if (pr->data==m){
p->next = pr->next;
free(pr);
}
else{
p = pr;
}
pr = p->next;
}
return L;
}