#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data; //结点的数据域
struct LNode *next;//结点的指针域
}LNode,*LinkList;
LNode* Create_LinkList()//尾插入法创建链表
{ int data ;
LNode *head, *p, *q;
head=(LNode *)malloc(sizeof(LNode));
p=head;
p->next=NULL; /* 创建单链表的表头结点 */
while (1)
{
scanf("%d", &data);
if (data==-1) break ;
q= (LNode *)malloc(sizeof(LNode));
q->data=data; // 数据域赋值
q->next=p->next;
p->next=q;
p=q; /*新创建的结点总是作为最后一个结点*/
}
return (head);
}
int ListInsert_L(LinkList &L, int i, int e)
{ //在带头结点单链线性表L的第i个元素之前插入元素e
//在此处之后插入代码
int j;
LinkList p,s;
p=L;
j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
int ListDelete_L(LinkList &L, int i, int &e)
{// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
//在此处之后插入代码
int j;
LinkList p,r;
p=L;
j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
return ERROR;
r=p->next;
p->next=r->next;
e=r->data;
free(r);
return OK;
}
void print_LinkList(LinkList L)
{
LinkList p;
p=L->next;
if(p==0)
printf("Linklist is null!\n");
else
{
printf("head");
do
{
printf("->%d",p->data);
p=p->next;
}
while(p!='\0');
printf("->end\n");
}
}
void main()
{
LinkList head;
head=Create_LinkList();
print_LinkList(head);
//在此处之后插入代码
int ListDelete_L(LinkList &L, int i, int &e);
int ListInsert_L(LinkList &L, int i, int e);
}