| #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); |
| |
| } |
| } |
| |
| |
| } |
| |
| |
| |
| |