因为上一篇的源码断断续续的,怕大家不好看得到,所以我把源码给大家全部放出来
差不多200行,也是第一次打这么多行的代码,希望能帮助大家,这些也很好的帮助到了我
#include<stdio.h>
#include <stdlib.h>
struct Test
{
int data;
struct Test*next;
};
void printflink(struct Test *head)
{
struct Test *point;
point = head;
while(point != NULL)
{
printf("%d ",point->data);
point = point ->next;
}
putchar('\n');
}
int insertlink(struct Test *head,int data,struct Test *new)
{
struct Test*p=head;
while (head!=NULL)
{
if(p->data==data)
{
new->next=p->next;
p->next=new;
return 1;
}
p=p->next;
}
return 0;
}
struct Test * insertforhead(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;
printf("insert ok\n");
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; //删除第一个,直接将链表头转移到下一个
return head;
}
while(p->next!=NULL) //避免内存浪费 原则上应该删除一个后 free(p)
{ //但是我不是动态地址 就没有处理的
if(p->next->data==data)
{
p->next=p->next->next; //删除非第一个,将该next指针指向下下个地址
return head;
}
p=p->next;
}
return head;
}
struct Test* insertfromhead(struct Test*head)
{
struct Test*new;
new=(struct Test*)malloc(sizeof(struct Test)); //开辟动态空间
printf("please input you new node:\n");
scanf("%d",&(new->data));
if(head==NULL)
{
head=new; //如果链表是空,直接将new变成head
return head;
}else {
new->next=head; //如果不为空,将new下一个地址指向head,并把head变成new
head=new;
}
return head;
}
struct Test* insertbehind(struct Test*head,struct Test*new)
{
struct Test*p=head;
if(p==NULL)
{
head=new; //如果是空链表,直接将new变成head
return head;
}
while(p->next!=NULL)
{
p=p->next; //一直循环到最后一个
}
p->next=new; //将最后一个的next指向new
return head;
}
int main()
{
int i;
int arr[]={1,2,3};
for(i=0;i<3;i++)
{
printf("%d ",arr[i]);
}
putchar('\n');
struct Test t1={1,NULL};
struct Test t2={2,NULL};
struct Test t3={3,NULL};
struct Test new={100,NULL};
struct Test new2={101,NULL};
struct Test new3={103,NULL};
struct Test new4={104,NULL};
struct Test*head=NULL;
t1.next=&t2;
t2.next=&t3;
head=&t1;
printf("use it printf three num\n");
printf("%d %d %d\n",t1.data,t1.next->data,t1.next->next->data);
printf("use point printf three num\n");
printflink(head);
insertlink(head,3,&new);
printflink(head);
head=insertforhead(&t1,1,&new3);
printf("insert 103 forhead 1\n");
printflink(head);
head=insertforhead(&t1,2,&new2);
printf("insert 101 forhead 2\n");
printflink(head);
head=deletnode(&t1,1);
printf("delete 1 \n");
printflink(head);
head=deletnode(&t1,2);
printf("delete 2 \n");
printflink(head);
head=insertfromhead(&t1);
printf("insert from head \n");
printflink(head);
head=insertbehind(head,&new4);
printf("insert from behind \n");
printflink(head);
}