#include<iostream.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*Linklist;
int InitList(Linklist&L){
L = new LNode;
if (!L) return 1;
else L->next = 0;
return 0;
}
int ListInsert(Linklist&L, int i, int e) { // 在带头结点的单链线性表L的第i个元素之前插入元素e
Linklist p,s;
p = L;
int j = 0;
while (p && j < i-1) { // 寻找第i-1个结点
p = p->next;
++j;
}
if (!p || j > i-1) return 1; // i小于1或者大于表长
s = (Linklist)malloc(sizeof(LNode)); // 生成新结点
s->data = e; s->next = p->next; // 插入L中
p->next = s;
return 0;
}
int ListDelete(Linklist&L, int i, int&e) { // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
Linklist p,q;
p = L;
int j = 0;
while (p->next && j < i-1) { // 寻找第i个结点,并令p指向其前趋
p = p->next; ++j;
}
if (!(p->next) || j > i-1) return 1; // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并释放结点
e = q->data;
free(q);
return 0;
} // ListDelete_L
int Traverse(Linklist L){
Linklist p = L->next;
while(p){
cout<<p->data<<" ";
p = p->next;
}
return 0;
}
void main(){
Linklist La;
InitList(La);
int a[6] = {1,4,8,3,6,0};
for(int i=1;i<7;i++){
ListInsert(La, i, a[i-1]); //插入
}
cout<<"La:";
Traverse(La);
cout<<endl;
int m; //删除
ListDelete(La, 3, m);
cout<<"删除元素后La:";
Traverse(La);
cout<<"删除元素为:"<<m<<endl;
}
![]()