一. 链表的创建
(1)尾插法
每次创建一个新节点P1,让P2跟着P1走,最后让P1的next指向NULL。
List Create_tail(int n)
{
List head, p1,p2; //获取链表的第一个地址 p1接收新开辟结点的地址
// p2表示最后一个结点的地址以便连接
for (int i = 1; i <= n; i++)//建立有n个结点的链表 所以循环n次
{
p1 = (List)malloc(sizeof(Node));
scanf("%d", &p1->a);
if (i==1) {
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
}
p2->next = NULL;
return head;
}
(2)头插法
让P1指向head,再让head跟着
List Create_head(int n)
{
List head,p1,p2;
for(int i=1;i<=n;i++)
{
p1=(List)malloc(sizeof(Node));
scanf("%d",&p1->a);
if(i==1)
{
head=p1;
p1->next=NULL;
}
else{
p1->next=head;
head=p1;
}
}
}
二. 链表的插入
void Add(List head)
{
List p1=head;
List p=(List)malloc(sizeof(Node));
scanf("%d",&p->a);
int n;
scanf("%d",&n) ;
if(n==1)
{
p->next=head;
head=p;
return ;
}
for(int i=1;i<n-1&&p1!=NULL;i++)
{
p1=p1->next;
}
if(p1->next!=NULL)
{
p->next=p1->next;
p1->next=p;
}
else{
p1->next=p;
p->next=NULL;
}
}
三. 链表的删减
void Delete(List head)
{
int n;
scanf("%d",&n);
List p1=head,p2=head;
for(int i=1;i<n&&p1!=NULL;i++)
{
p2=p1;
p1=p1->next;
}
if(p1==NULL)
{
printf("没有找到该结点,删除失败!\n");
return ;
}
if(p1==head)
{
head=head->next;
free(p1);
return;
}
else
{
p2->next=p1->next;
free(p1);
return ;
}
}
四. 链表的查找
List Search(List head)
{
int val;
List p=head;
scanf("%d",&val);
while(p!=NULL&&p->a!=val)
{
p=p->next;
}
if (p==NULL)
{
printf("没有找到该点!\n");
return NULL;
}
return p;
}
五. 链表的改变
void modify(List head)
{
List p=Search(head);
if(p==NULL)
{
return ;
}
int val;
scanf("%d",&val);
p->a=val;
return ;
}