C语言入门:奇数值节点链表

奇数值节点链表:输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的节点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应程序。


#include
#include
struct a {            //结构a的定义
	int n;
	struct a *next;
} A;

struct a *creat()      //建立链表函数
{
	int count=1,n;
	struct a *p,*tail,*L;
	L=tail=NULL;
	printf("输入-1结束\n");
	while (1)
	{
		printf("请输入第%d个正整数: ",count);
		scanf("%d",&n);
		if(n<-1||n==0)
			printf("第%d个数输入错误,请重新输入!\n",count);
		else if (n==-1)
		{
			printf("输入结束!\n");
			break;
		}
		else
		{
			p=(struct a *)malloc(sizeof(struct a));
			p->n=n;
			p->next=NULL;
			if(L==NULL)
				L=p;
			else
				tail->next=p;
			tail=p;
			count++;
		}
	}
	return L;
}

int main ()
{
	struct a *L,*NEW=NULL,*pL,*pNEW,*tail=NULL,*p;
	L=creat();
	for(pL=L;pL!=NULL;pL=pL->next)            //遍历链表L的循环
    	if(pL->n%2)                           //筛选出奇数,放入新链表NEW中
		{
    		pNEW=(struct a *)malloc(sizeof(struct a));
    		pNEW->n = pL->n;
    		pNEW->next = NULL;
    		if(NEW==NULL)
    			NEW = pNEW;
    		else
    			tail->next = pNEW;
   			tail = pNEW;
		}
	if(NEW==NULL)
	{
		printf("NEW中不含任何信息!\n");
		return 0;
	}
	printf("NEW链表中的信息为:\n");
	for(p=NEW;p!=NULL;p=p->next)              //遍历新链表NEW输出NEW中信息
		printf("%d ",p->n);
	printf("\n");
	return 0;
}

C语言入门:奇数值节点链表_第1张图片                     C语言入门:奇数值节点链表_第2张图片




你可能感兴趣的:(C语言入门:奇数值节点链表)