#include <malloc.h>
typedef struct LNode
{
int data;
struct LNode* next;
}LNode,*LinkList;
//在第i个位置插入元素e (带头结点)
bool ListInsert(LinkList& L, int i, int e)
{
if (i < 1)//位序是从1 开始的
return false;
LNode* p;//指针p指向当前扫描到的节点
int j = 0;//当前p指向的是第几个结点
p = L;//L指向头结点,头结点是第0和结点(不存数据)
while (p!=NULL&&j<i-1)//循环找到第i-1个结点
{
p = p->next;
j++;
}
if (p == NULL)
{
return false;
}
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;//将结点s连到p之后
return true;//插入成功
}
//在第i个位置插入元素e (不带头结点)
bool ListInsert(LinkList& L, int i, int e)
{
if (i < 1)//位序是从1 开始的
return false;
if (i == 1)//插入第一个结点的操作与其他结点操作不同
{
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s;
return true;
}
LNode* p;//指针p指向当前扫描到的节点
int j = 1;//当前p指向的是第几个结点
p = L;//L指向头结点,头结点是第0和结点(不存数据)
while (p != NULL && j < i - 1)//循环找到第i-1个结点
{
p = p->next;
j++;
}
if (p == NULL)
{
return false;
}
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;//将结点s连到p之后
return true;//插入成功
}
//后插操作:在p结点后插入元素e
bool InsertNextNode(LNode* p, int e)
{
if (p == NULL)
{
return false;
}
LNode* s = (LNode*)malloc(sizeof(LNode));
if (s == NULL)
{
return false;
}
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//前插操作:在p结点之前插入元素e
bool InsertPriorNode(LNode*p,int e)
{
if (p == NULL)
return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
if (s == NULL)//内存分配失败
return false;
s->next = p->next;
p->next = s;//新结点 s是连到 p之后
s->data = p->data;//将p 中的元素复制到s中
p->data = e;//p中元素覆盖为e
}
bool ListDelete(LinkList &L,int i, int &e)
{
if (i < 1)
return false;
LNode* p;
int j = 0;
p = L;
while (p!=NULL&&j<i-1)//循环到第i-1个结点
{
p = p->next;
j++;
}
if (p == NULL)
return false;
if (p->next == NULL)
return false;
LNode* q = p->next;
e = q->data;
p->next = q->next;
free(q);
return true;
}