#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
struct cell {//单链表结点结构体定义
int x;
struct cell* next;
};
struct cell* build(void) {//新建单链表,并将建好的单链表首结点地址返回
struct cell* head, * tmp, * tail;
head = tmp = tail = NULL;
int n;
scanf("%d", &n);
if (n == 0)
return head;
else
{
head = (struct cell*)malloc(sizeof(struct cell));
head->x = n;
head->next = NULL;
tail = head;
while (tail->x != 0)
{
tmp = (struct cell*)malloc(sizeof(struct cell));
scanf("%d", &n);
tmp->x = n;
tmp->next = NULL;
tail->next = tmp;
tail = tmp;
}
}
return head;//返回单链表头
}
struct cell* delete(struct cell* head, int k)
{
struct cell* p, * p0;
p0 = p = head;
if (head == NULL)
return head;
else
{
while (p->x != 0)
{
if (p == head && p->x == k)
{
head = head->next;
p = head;
}
else
{
if (p->x == k)
{
p0->next = p->next;
p = p->next;
}
else
{
p0 = p;
p = p->next;
}
}
}
return head;
}
}
void print(struct cell* head) {
struct cell* p;
p = head;
if (head == NULL)
printf("NULL");
else
{
while (p->next != NULL)
{
if (p->x != 0)
{
printf("%d ", p->x);
p = p->next;
}
}
}
}
void release(struct cell* head) {
struct cell* p;
p = head;
if (head == NULL)
;
while (head != NULL)
{
p = head;
head = head->next;
free(p);
}
}
int main(void) {
struct cell* head;
head = build();
if (head != NULL) {
int k = 0;
scanf("%d", &k);
head = delete(head, k);
print(head);
}
else
printf("NULL");
release(head);
return 0;
}