#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
//单链表类型定义
typedef struct node
{
int data;
struct node *next;
}LNode, *LinkList;
//单链表的创建 (尾插法)
LinkList Creat_LinkList( )
{ LNode *s,*r;int x;
LinkList H = (LinkList) malloc(sizeof(LNode));
H->next = NULL;r=H;
scanf("%d",&x);
while(x!=-1)
{ s = (LinkList) malloc(sizeof(LNode));
s->data=x;
s->next = r->next;
r->next = s;
r=s;
scanf("%d",&x);
}return H;
}
//按序号查找
LinkList Get_LinkList(LinkList H,int k)
{ LNode *p;
int j=1;
p=H->next;
while(p->next!=NULL && j<k)
{ p=p->next;
j++;
}
if(j==k)return p;
else return NULL;
}
//单链表的插入
int Insert_LinkList(LinkList H, int i, int x)
{
//插入代码;
LNode *p,*s;
p = Get_LinkList(H,i-1); //查找插入的 前一个位置
if (p == NULL)
{
printf("插入失败");
return ERROR;
}
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
return OK;
}
//单链表的删除
int Del_LinkList(LinkList H,int i)
{
//删除代码;
LNode *p,*q;
p = Get_LinkList(H,i-1);
if (p == NULL || p->next == NULL)//前一个为空,或者当前的为空
{
printf("删除失败");
return ERROR;
}
q = p->next;
p->next = q->next;
free(q);
return OK;
}
//单链表的输出
void Print_LinkList(LinkList H)
{
LNode *p;
p=H->next;
while(p!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("end\n");
}
void nz(LinkList H)
{
LinkList p,q;
p = H->next;
H->next = NULL;
while (p)
{
q = p;//保存当前节点的后一个节点
p = p->next;
q->next = H->next;
H->next = q;
}
}
main()
{
LinkList H,p;
int i,num,x;
H=Creat_LinkList( );
Print_LinkList(H);
printf("请输入要插入的序号:\n");
scanf("%d",&num);
printf("请输入要插入的值:\n");
scanf("%d",&x);
if(Insert_LinkList(H,num,x)==OK)
{ printf("插入成功!\n");Print_LinkList(H);}
else
printf("插入失败!\n");
//调用删除代码;
printf("请输入要删除的序号:\n");
scanf("%d",&num);
if(Del_LinkList(H,num)==OK)
{ printf("删除成功!\n");
Print_LinkList(H);}
else
printf("删除失败!\n");
nz(H);//逆置
Print_LinkList(H);
}
转载请注明原文地址: https://ju.6miu.com/read-671015.html