**
C语言 动态链表的建立以及节点的删除
**
作为一个刚接触C语言一学期不到的小白,在挣扎中写完了实验作业的一道题,C语言 动态链表的建立以及节点的删除,现在大概摸清楚了动态链表的构建流程,但是各种函数名,指针还是有点晕的。
代码如下
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student*next;
};
int n;
struct student*creat(void)
{
struct student * head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student*)malloc(LEN);
scanf("%ld %f",&p1->num ,&p2->score );
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%ld %f",&p1->num ,&p1->score );
}
p2->next=NULL;
return (head);
}
struct student*delete1(struct student *head)
{
struct student *p1,*p2;
int x;
scanf("%d",&x);
p1=head;
if(x==1)
{
p2=p1->next;
free(p1);
return p2;
}
else
{
int i=1;
while(p1&&i<x-1)
{
p1=p1->next;
i++ ;
}
p2=p1->next;
p1->next=p1->next->next;
free(p2);
return head;
}
}
void print(struct student* head) //输出学生信息的函数
{
struct student* p;
p = head; //p取head的地址之后,二者同时指向第一个结点的开头
n == 0;
printf("\n");
if (head != NULL)
{
do
{
printf("%d%6.1f\n", p->num, p->score);
p = p->next; //把next的地址(即下一个结点的开头)赋给p
n++;
} while (p != NULL);
}
}
int main()
{
struct student*head;
head=creat();
head=delete1(head);
print(head);
}
欢迎路过点开的大神指正