#include <stdio.h>
#include <stdlib.h>
struct Test
{
int data;
struct Test *next;
};
void printLink(struct Test *head)
{
struct Test *point;
point = head;
while(point != NULL)
{
printf("%d ",point->data);
point = point->next;
}
putchar('\n');
}
int getLinkTotalNodeNum(struct Test *head)
{
int cnt = 0;
while(head != NULL)
{
cnt++;
head = head->next;
}
return cnt;
}
int searchLink(struct Test *head,int data)
{
while(head != NULL)
{
if(head->data == data)
{
return 1;
}
head = head->next;
}
return 0;
}
int insertFromBehind(struct Test *head,int data,struct Test *new)
{
struct Test *point;
point = head;
while(point != NULL)
{
if(point->data == data)
{
new->next = point->next;
point->next = new;
return 1;
}
point = point->next;
}
return 0;
}
struct Test* insertFromform(struct Test *head,int data,struct Test *new)
{
if(head->data == data)
{
new->next = head;
return new;
}
while(head->next != NULL)
{
if(head->next->data == data)
{
new->next = head->next;
head->next = new;
puts("insert ok\n");
return head;
}
head = head->next;
}
printf("no this data%d\n",data);
return head;
}
struct Test* deleNode(struct Test *head,int data)
{
struct Test *p = head;
if(p->data == data)
{
head = head->next;
free(p);
return head;
}
while(p->next != NULL)
{
if(p->next->data == data)
{
//struct Test *tmp = p;
p->next = p->next->next;
//free(tem);
return head;
}
p = p->next;
}
return head;
}
struct Test *insertFromHead(struct Test *head,struct Test *new)
{
if(head == NULL)
{
head = new;
}
else
{
new->next = head;
head = new;
}
return head;
}
struct Test* createLink(struct Test *head)
{
struct Test *new;
while(1)
{
new = (struct Test *)malloc(sizeof(struct Test));
puts("input new data");
scanf("%d",&(new->data));
if(new-> data ==0)
{
printf("0 quit!\n");
free(new);
return head;
}
head = insertFromHead(head,new);
}
}
struct Test *insertBehind(struct Test *head,struct Test *new)
{
struct Test *p = head;
if(p == NULL)
{
head = new;
return head;
}
while(p->next != NULL)
{
p = p->next;
}
p->next = new;
return head;
}
struct Test* createLink2(struct Test *head)
{
struct Test *new;
while(1)
{
new = (struct Test *)malloc(sizeof(struct Test));
puts("input new data");
scanf("%d",&(new->data));
if(new-> data ==0)
{
printf("0 quit!\n");
free(new);
return head;
}
head = insertBehind(head,new);
}
}
int main()
{
struct Test *head = NULL;
head = createLink2(head);
printLink(head);
struct Test t1 = {1000,NULL};
head = insertFromHead(head,&t1);
printLink(head);
struct Test t2 = {2000,NULL};
head = insertBehind(head,&t2);
printLink(head);
/* //struct Test t1 = {1,NULL};
struct Test *p = (struct Test*)malloc(sizeof(struct Test));
struct Test t2 = {2,NULL};
struct Test t3 = {3,NULL};
struct Test t4 = {4,NULL};
struct Test t5 = {5,NULL};
struct Test new = {100,NULL};
struct Test new2 = {101,NULL};
struct Test new3 = {103,NULL};
struct Test *head = NULL;
head = p;
p->data = 1;
//t1.next = &t2;
p->next = &t2;
t2.next = &t3;
t3.next = &t4;
t4.next = &t5;
printf("use to print nums\n");
//printf("%d %d %d\n",t1.data,(t1.next)->data,((t1.next)->next)->data);
printLink(head);
head = deleNode(head,5);
printLink(head);
/*puts("after insert behind");
insertFromBehind(head,3,&new);
printLink(&t1);
puts("after insert form");
head = insertFromform(head,1,&new2);
printLink(head);
puts("after insert form");
head = insertFromform(head,101,&new3);
printLink(head);
int ret;
ret = getLinkTotalNodeNum(&t1);
printf("total num = %d\n",ret);
ret = searchLink(&t1,1);
if(ret == 0)
{
printf("no 1\n");
}
else
{
printf("have 1\n");
}
ret = searchLink(&t1,8);
if(ret == 0)
{
printf("no 8\n");
}
else
{
printf("have 8\n");
}
*/
return 0;
}
尾插法创建链表
最新推荐文章于 2024-06-28 23:49:58 发布