#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct list
{
	int num;
	char name[10];
	int score;
	struct list *next;	
};
typedef struct list node;
typedef node *link;

void del_ptr(link *head, link ptr);

int main()
{
	link newnode, ptr, head;
	int i, j, findword = 0, find, data[12][2];
	char namedata[12][10] = {{"Allen"},{"Scott"},{"Marry"},{"John"},{"Mark"},{"Ricky"},{"Lisa"},{"Jasica"},{"Hanson"},{"Amy"},{"Bob"},{"Jack"}};
	srand((unsigned)time(NULL));
	printf("num  score  num  score  num  score  num  score\n");
	printf("==============================================\n");
	for(i = 0; i < 12; i++)
	{
		data[i][0] = i + 1;
		data[i][1] = rand()%50+51;
	}
	for(i = 0; i < 3; i++)
	{
		for(j = 0; j < 4; j++)
			printf("[%2d][%3d]",data[j*3+i][0],data[j*3+i][1]);
		printf("\n");
	}
	for(i = 0; i < 12; i++)
	{
		newnode =(link)malloc(sizeof(node));
		newnode->num = data[i][0];
		for(j = 0; j < 10; j++)
			newnode->name[j] = namedata[i][j];
		newnode->score = data[i][1];
		newnode->next = NULL;
	
		if(i == 0)
		{
			head = newnode;
			head->next = NULL;
			ptr = head;
		}
		ptr->next = newnode;
		ptr = ptr->next;

		if(!newnode)
		{
			printf("Error memory access fail\n");
			exit(1);
		}
	}
	while(1)
	{
		printf("input delete score, end input -1:");
		scanf("%d", &findword);
		if(findword == -1)
			break;
		else
		{
			ptr = head;
			find = 0;
			while(ptr != NULL)
			{
				if(ptr->score == findword)
				{
					del_ptr(&head,ptr);
					printf("\n ptr->score:%d\n",ptr->score);
					find++;
				}
				
				ptr = ptr->next;
			}
			if(find == 0)
				printf("##########no find##########\n");
		}
	}
	ptr = head;	
	printf("\n\t num\t     name\tscore\n");
	printf("\t========================\n");
		
	while(ptr!=NULL)
	{
		printf("%3d\t%-s\t%3d\n",ptr->num,ptr->name,ptr->score);
		ptr = ptr->next;
	}
	system("pause");
	return 0;
}

void del_ptr(link *startPtr, link ptr)
{
	link top = *startPtr;
	if(ptr == *startPtr)
	{
		*startPtr = ptr->next;
		printf("delete %d student! name: %s\n",ptr->num,ptr->name);
	}
	else
	{
		while(top->next != ptr)
			top = top->next;
		if(ptr->next == NULL)
		{
			top->next = NULL;
			printf("delete %d student! name: %s\n",ptr->num,ptr->name);		
		}
		else
		{
			top->next = ptr->next;
			printf("delete %d student! name: %s\n",ptr->num,ptr->name);	
		}
	}
	printf("\n ptr->score:%d\n",ptr->score);
	free(ptr);
	printf("\n ptr->score:%d\n",ptr->score);
}