#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
typedef struct node{ //定义结构体
int num; // 存数据
struct node *next; //递归(定义结构体指针)
}Node,*LinkList; //自定义
LinkList InitList() //建立头结点
{
LinkList head; //head为头结点
head=(Node*)malloc(sizeof(Node)); //给头结点分配空间
head->next=NULL; //初始化指向NULL
return head;
}
void creat(Node* head,int i) //建立链表
{
Node *s; //指针s,r
Node *r;
s=(Node*)malloc(sizeof(Node));
s->num=1;
head->next=s; //与头结点连接
for(int j=1;j<i;j++)
{
r=(Node*)malloc(sizeof(Node)); //循环建立
r->num=j+1; //赋初值
s->next=r; //让连起来
s=r;
}
s->next=NULL; //结束 NULL
}
void output(Node* head) //输出
{
Node *p; //用结构体指针指向 不断地后移输出
p=head->next;
while(p)
{
printf("%d ",p->num);
p=p->next ;
}
printf("\n");
}
LinkList search(Node *head,int i) //寻找第i个,(从一开始)
{
int count=1;
Node *p;
p=head->next;
while(count!=i)
{
p=p->next;
count++;
}
return p;
}
void add(Node *head,int x,int i) //在i个元素前增加 ,赋值为x
{
Node *q,*p;
p=(Node*)malloc(sizeof(Node));
p->num=x;
q=search(head,i-1);
p->next=q->next;
q->next=p;
}
void delet(Node*head,int i) //删去第i个元素
{
Node *p,*q;
p=search(head,i-1); //只有前一个的next发生改变
q=p->next;
p->next=q->next; //或者写成(p->next=p->next->next;)
free(q); //最后不要忘记释放
}
int main()
{
LinkList head,p;
head=InitList();
creat(head,6);
output(head);
p=search(head,3);
printf("%d\n",p->num);
add(head,99,3);
output(head);
delet(head,3);
output(head);
free(head);
return 0;
}
简单写了一个,很水的链表,带头结点。
因为很简单,注释应该都可以看懂,就不多说了。