C语言:动态链表实现根据要求删除节点

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88094444

注意

输出节点时要分开输出,否则容易出现非法字符

	p1 = head->next;
	while(p1){
		printf("%ld ",p1->num);
		printf("%s ",p1->name);
		printf("%s ",p1->sex);
		printf("%d\n",p1->age);
		p1 = p1->next;
	}

题目

建立链表,删除和输入年龄相同的节点

代码

#include <stdio.h>
#include <malloc.h>
#define Len sizeof(Node)

typedef struct Node {
	long num;
	char name[20];
	char sex[4];
	int age;
	struct Node *next;
}*Linklist,Node;

int main() {
	Linklist head,p1,p2;
	int i,age;
	//head为头结点
	head = (Linklist)malloc(Len);
	head->next = NULL;
	
	p2 = head;
	//输入3个节点
	for(i=1; i<4; i++) {
		p1 = (Linklist)malloc(Len);
		scanf("%ld",&p1->num);
		scanf("%s",&p1->name);
		scanf("%s",&p1->sex);
		scanf("%d",&p1->age);
		//尾插法建立链表
		p2->next = p1;
		p2 = p1;
	}
	p2->next = NULL;
	//删除和输入年龄相同的节点
	printf("请输入一个年龄:");
	scanf("%d",&age);
	
	p1 = head;
	while(p1->next) {
		p2 = p1->next;
		if(p2->age==age){
			p1->next = p2->next;
			free(p2);
		}
		else p1 = p2;
	}
	//输出节点时要分开输出,否则容易出现非法字符
	p1 = head->next;
	while(p1){
		printf("%ld ",p1->num);
		printf("%s ",p1->name);
		printf("%s ",p1->sex);
		printf("%d\n",p1->age);
		p1 = p1->next;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88094444