不管了,虽然这只是平时的一次作业,但是我写了好久(真的太菜了)不要脸的发发记录一下吧!!(*^▽^*)(*^▽^*)
题目:
输入一个正整数 n (0<n<10),做 n 次下列运算: 输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的奇数值结点删除后输出,若删除后链表为空则输出NULL。
输入:
第一行一个正整数n表示有n组数据;
接下来n行,每一行输入若干个整数以-1位结束标志(-1不属于序列)
输出:
输出删除奇数值结点后的链表
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} node;
node* create() {
node* head = NULL;
node* p = NULL;
node* temp = NULL;
int i, n;
for (i = 0; i < 10; i++) {
scanf("%d", &n);
if (n == -1) {
break;
}
p = (node*)malloc(sizeof(node));
p->data = n;
p->next = NULL;
if (head == NULL) {
head = p;
temp = head;
} else {
temp->next = p;
temp = p;
}
}
return head;
}
node* delet(node* q) {
node* head = q;
node* prev = NULL;
node* current = q;
while (current != NULL) {
if (current->data % 2 != 0) {
if (current == head) {
head = current->next;
free(current);
current = head;
} else {
prev->next = current->next;
free(current);
current = prev->next;
}
} else {
prev = current;
current = current->next;
}
}
return head;
}
void printLinkedTable(node* q) {
node* current = q;
if(current==NULL)
{printf("NULL\n");
return;
}
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
void freeAll(node* r) {
node* current = r;
node* next = NULL;
/*if(r==NULL)
{printf("NULL\n");}*/
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
}
int main()
{
node *head;
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i)
{
// 创建链表
head = create();
// 删除奇数结点
head=delet(head);
// 输出链表数据
printLinkedTable(head);
// 释放当前链表空间
freeAll(head);
}
return 0;
}
现在是23:57分,生死更新一把,大家今天都要开心哦(〃'▽'〃)(〃'▽'〃),晚安!!