blob: 01dc330bc477ac36683095e5fd52dc4a90fda9eb [file] [log] [blame]
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "link_name.h"
static struct NodeName* head= NULL;
static struct NodeName* end = NULL;
void AddListTillByName(char *name )
{
struct NodeName* temp=(struct NodeName*)malloc(sizeof(struct NodeName));
temp->name=name;
strcpy(temp->name, name);
temp->next=NULL;
if(NULL==head)
{
head=temp;
}
else
{
end->next=temp;
}
end=temp;
}
void ScanListByName()
{
struct NodeName *temp =head;
while (temp !=NULL)
{
printf("%s\n",temp->name);
temp = temp->next;
}
}
struct NodeName* FindNodeByName(char *name)
{
struct NodeName *temp =head;
while(temp !=NULL)
{
if(!strcmp(temp->name, name))
{
return temp;
}
temp = temp->next;
}
return NULL;
}
void FreeListByName()
{
struct NodeName *temp =head;
while (temp !=NULL)
{
struct NodeName* pt =temp;
temp = temp->next;
free(pt);
}
head =NULL;
end =NULL;
}
void DeleteListTailByName()
{
if (NULL == end)
{
printf("link name is NULL\n");
return;
}
if (head==end)
{
free(head);
head=NULL;
end=NULL;
}
else
{
struct NodeName* temp =head;
while (temp->next!=end)
{
temp = temp->next;
}
free(end);
end=temp;
end->next=NULL;
}
}
void DeleteListHeadByName()
{
struct NodeName* temp=head;
if (NULL==head)
{
printf("link NULL\n");
return;
}
head=head->next;
free(temp);
}
void DeleteListRandByName(char *name)
{
if(NULL==head)
{
printf("link NULL\n");
return;
}
struct NodeName* temp =FindNode(name);
if(NULL==temp)
{
printf("NO this number\n");
return;
}
if(head==end)
{
free(head);
head=NULL;
end=NULL;
}
else if(head->next==end)
{
if(end == temp)
{ DeleteListTail(); }
else if(temp==head)
{ DeleteListHead(); }
}
else
{
if(end==temp)
DeleteListTail();
else if(temp==head)
DeleteListHead();
else
{
struct NodeName*pt =head;
while(pt->next!=temp)
{
pt=pt->next;
}
pt->next=temp->next;
free(temp);
}
}
}