#include <iostream.h>
//#include<stdio.h>
#include <stdlib.h>
typedef struct LNode {
int
data; // 数据域
struct LNode
*next; // 指针域
} LNode,
*LinkList;
LinkList L;
// L 为单链表的头指针
void CreateList_L(LinkList &L, int n) { // 逆序输入 n
个数据元素,建立带头结点的单链表
LNode *p;
L = (LinkList) malloc (sizeof (LNode));
L->next =
NULL; //
先建立一个带头结点的单链表
for (int i = n; i > 0; --i) {
p = (LinkList) malloc (sizeof (LNode));
cin>>p->data;
// 输入元素值
p->next = L->next;
L->next = p; // 插入
}
}
int ListInsert_L(LinkList L, int i, int e)
{
// L 为带头结点的单链表的头指针,本算法
// 在链表中第i 个结点之前插入新的元素 e
LNode *p;
LNode *s;
int j;
p =
L; j =
0;
while (p
&& j < i-1)
{ p = p->next;
++j; } // 寻找第 i-1 个结点
if (!p || j
> i-1)
return
0;
// i 大于表长或者小于1
s =
(LinkList) malloc ( sizeof (LNode));
// 生成新结点
s->data = e;
s->next =
p->next;
p->next = s; // 插入
return
1;
}
int ListDelete_L(LinkList L, int i, int &e)
{
// 删除以 L 为头指针(带头结点)的单链表中第 i
个结点
LNode *p;
LNode *q;
int j;
p =
L; j =
0;
while (p->next && j
< i-1) { p =
p->next; ++j;
}
// 寻找第 i 个结点,并令 p 指向其前趋
if (!(p->next) || j
> i-1)
return 0; // 删除位置不合理
q = p->next;
p->next = q->next;
// 删除并释放结点
e = q->data;
free(q);
return 1;
}
void main()
{
LinkList LL;
LNode *p;
int n,e,i;
cout<<"建立的链表需要的结点个数是"<<endl;
cin>>n;
cout<<endl;
CreateList_L(LL, n);
cout<<"需要的插入位置是"<<endl;
cin>>i;
ListInsert_L(LL, i, 10);
p=LL->next;
cout<<endl<<"
after insert"<<endl;
while(p)
{
cout<<"
"<<p->data<<"
";
p=p->next;
}
cout<<"需要的删除位置是"<<endl;
cin>>i;
ListDelete_L(LL,i, e);
cout<<endl<<"
after delete"<<endl;
p=LL->next;
while(p)
{
cout<<"
"<<p->data<<"
";
p=p->next;
}
}
加载中,请稍候......