<span style="font-family: Arial, Helvetica, sans-serif;">#include <stdlib.h> </span>
typedef struct num{
int data;
struct num *next; // next指针用来找到结点的下一个结点(存放着下一个结点的地址)
}list,*link;
link Create() //链表的创建
{
link head; // 头结点(但不存数据)
head=(link)malloc(sizeof(list));
link temp; // 待连接的结点
temp=head;
link pnew; // 新创建的结点,即连接到链表末尾的结点(pnew->next=NULL)
int x;
scanf("%d",&x);
while(x!=0) //当x==0时退出链表的创建
{
pnew = (link)malloc(sizeof(list)); //为pnew申请新结点
pnew->data=x; // 为新结点的数据域赋值
pnew->next=NULL; // 新结点的next指向NULL(在后面的对链表的操作可以作为结束条件)
temp->next=pnew; //待连接的结点指向要链接的结点
temp=pnew; //把pnew赋给temp,使得temp为最后一个结点,为下一次循环做准备
scanf("%d",&x);
}
return head; //返回头结点
}
link Delete(link head) //链表的删除
{
link p;
p=head->next;
link q;
int x;
printf("\n请输入要删除的数:");
scanf("%d",&x);
while(p->data!=x) // 找到要删除的数
{
q=p; // q为要删除结点的前一个结点
p=p->next; // p为要删除的结点
}
q->next=p->next; // 要删除结点的前一个结点指向要删除结点的后一个结点(p->next)
return head; //
}
link Insert(link head) //链表的插入
{
link p;
p=head->next;
link q;
link r; //r为要插入的结点
int x;
r=(link)malloc(sizeof(list));
printf("\n请输入你要插入的数:");
scanf("%d",&r->data);
printf("请输入你要插入哪个数后:");
scanf("%d",&x);
while(q->data!=x) //找到要插入结点位置
{
q=p; // q为要插入的前一个结点
p=p->next; // p为要插入结点的后一个结点
}
r->next=p; // 要插入的结点指向插入后的后一个节点
q->next=r; // 要插入的前一个结点指向要插入的结点
return head;
}
link Reverse(link head) // 链表的逆置
{
link p,q;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
q=p; // q为待逆置的结点
p=p->next; // 找到待逆置结点的后一个结点p
q->next=head->next; // 待逆置的q结点指向头结点的下一个结点
head->next=q; // 头结点指向待逆置的结点q
}
printf("\n逆置后为:");
return head;
}link Reverse(link head) // 不带头结点链表的逆置
{
link p,q,m,t;
p=head;
m=p;
q=p->next;
p->next=NULL;
t=q;
while(t!=NULL)
{
q=t;
t=t->next;
q->next=m;
m=q;
}
return m;
}
void Print(link head) // 输出链表
{
link p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
link head;
head = Create();
Print(head);
Delete(head);
Print(head);
Insert(head);
Print(head);
Reverse(head);
Print(head);
}
以上代码在dev上面调试通过。