#include <stdio.h>
#include <stdlib.h>
struct Test
{
int data;
struct Test *next;
};
struct Test* insertFromfor(struct Test *head,int data,struct Test *new)
{
struct Test *p = head;
if(p->data == data) {
new->next = head;
return new;
}
while(p->next != NULL) {
if(p->next->data == data) {
new->next = p->next;
p->next = new;
return head;
}
p = p->next;
}
printf("no this data: %d\n",data);
return head;
}
struct Test* deletNode(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(p);
return head;
}
p = p->next;
}
return head;
}
/* void printLink(struct Test *head)
{
struct Test *point;
point = head;
while(1) {
if(point != NULL) {
printf("%d ",point->data);
point = point->next;
}else{
putchar('\n');
break;
}
}
} */
int printLink(struct Test *head)
{
struct Test *point;
point = head;
while(point != NULL) {
printf("%d ",point->data);
point = point->next;
}
putchar('\n');
}
int getLinkTotalNum(struct Test *head)
{
struct Test *p=head;
int cnt = 0;
while(p != NULL) {
cnt++;
p = p->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 changeLink(struct Test *head,int data,int newdata)
{
while(head != NULL) {
if(head->data == data) {
head->data = newdata;
return 1;
}
head = head->next;
}
return 0;
}
int insertFromBehind(struct Test *head,int data,struct Test *new)
{
struct Test *p = head;
while(p != NULL) {
if(p->data == data) {
new->next = p->next;
p->next = new;
return 1;
}
p = p->next;
}
return 0;
}
struct Test* insertFromHead(struct Test *head)
{
struct Test *new;
new = (struct Test *)malloc(sizeof(struct Test));
printf("input your new node data:\n");
scanf("%d",&(new->data));
if(head == NULL) {
head = new;
return head;
} else {
new->next = head;
head = new;
}
return head;
}
int main()
{
struct Test *head = NULL;
head = insertFromHead(head);
printLink(head);
/* int i;
int array[] = {1,2,3,4,5,6};
for(i=0;i<sizeof(array)/sizeof(array[0]);i++) {
printf("%d ",array[i]);
}
putchar('\n');
// 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};
p->data = 1;
// t1.next = &t2;
p->next = &t2;
t2.next = &t3;
t3.next = &t4;
// head = &t1;
head = p;
struct Test new = {100,NULL};
struct Test new2 = {101,NULL};
struct Test new3 = {102,NULL};
// printf("%d %d %d %d\n",t1.data,t1.next->data,t1.next->next->data,t1.next->next->next->data);
printLink(head);
head = deletNode(head,2);
printLink(head);
*/
/* puts("after insert behind:\n");
insertFromBehind(head,3,&new);
printLink(&t1);
head = insertFromfor(head,1,&new2);
puts("after insert behind:\n");
printLink(head);
head = insertFromfor(head,1000,&new3);
puts("after insert behind:\n");
printLink(head); */
/* int ret = getLinkTotalNum(&t1);
printf("total num = %d\n",ret);
int ret = searchLink(head,1);
if(ret == 0) {
printf("no 1\n");
} else {
printf("have 1\n");
} */
return 0;
}