cocobear9  
一枚普通的zisuer(lll¬ω¬),努力每天多学一点点

题目描述

输入一批以负数为结束的正整数,建立一个顺向链表存放。然后再输入一个正数数,若该整数在链表中出现,则从链表中删除该数,并输出链表中的所有数据, 否则输出NO。

 

输入

第一行 一批以负数为结束的若干个正整数
第二行 一个正整数

输出

若该整数在链表中出现,则从链表中删除该数,并输出链表中的所有数据, 否则输出NO

样例输入

1 2 3 4 5 6 7 8 -7
4

样例输出

1 2 3 5 6 7 8

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE ,*PNODE ;
PNODE creat_list(void);
void show_list(PNODE phead);
bool check_list(PNODE phead,int num);
PNODE delect_list(PNODE phead,int num) ;

int main()
{
int num;
PNODE phead=NULL;
phead=creat_list();
// show_list(phead);
scanf("%d",&num);
if(check_list(phead,num))
{
phead =delect_list(phead,num) ;
show_list(phead);
}
else
{
printf("NO");
}

 


}
PNODE creat_list(void)
{
int val;
PNODE phead=(PNODE)malloc(sizeof(NODE));
PNODE pTail=phead;
while(1)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
scanf("%d",&val);
if(val<0)
break;
pNew->data =val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return phead;
}
PNODE delect_list(PNODE phead,int num)
{
PNODE p =phead->pNext;
PNODE prev = phead;//设置一个哨兵节点,他是空的
PNODE temp=NULL;
while(p!=NULL)
{
if(p->data == num)
{
temp=p ;
p=p->pNext;
prev->pNext=p;
free(temp);
}
else
{
prev=p ;
p=p->pNext;
}
}
return phead;
}

bool check_list(PNODE phead,int num)
{
PNODE p=phead->pNext;
while(p->data!=num)
{

// printf("%d ",p->data);
p=p->pNext;
if(p==NULL) break;
}
if(p==NULL) return false ;
return true ;
}
void show_list(PNODE phead)
{
PNODE p=phead->pNext;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->pNext;
}
printf("\n");
}



posted on 2020-03-03 22:37  cocobear9  阅读(631)  评论(0)    收藏  举报