链表中的段错误,帮忙找一下吧

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的奇数值结点删除后输出


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{ 
	int data;
	struct Node *next; 
}No;
No* createlist()
{
 	No * head;
 	No * p,* pre;
 	int i,a;
	head=(No*)malloc(sizeof(No));
	head->next=NULL;
	pre=head;	
	while(scanf("%d",&a))	
	{
		if(a!=-1)
	    {
			p=(No*)malloc(sizeof(No));
	    	p->data=a;
			pre->next=p;
			pre=p;
		}
		else
		{
			pre->next=NULL;
			break;
		}
   } 
  return head;
}
void print(No*head)
{
		int i,n=0;
		No* q=head;
		No*h=head->next;
		while(h)
		{
			if((h->data)%2!=0)
			{
			q->next=h->next;
			h=h->next;
			}
			else{
				q=h;
		    	h=h->next;
			}
		}
		free(h);
		while(head->next->next)
	{
		printf("%d ",head->next->data);
		head=head->next;
	}
	printf("%d",head->next->data);
			
}
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		print(createlist());
		printf("\n");
	}
	return 0;
}

输入样例:

2 (repeat=2)
1 2 3 4 5 6 7 -1
1 3 5 -1

输出样例:

2 4 6



weibo_殇雨916_0
浏览 2206回答 1
1回答

杰伦窗外的小麻雀

我本职做前端的,不要总是问我C啊,表示不会
打开App,查看更多内容
随时随地看视频慕课网APP