按位序插入(带头结点)
#define NULL 0
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//在第i个位置插入数据e(带头结点)
bool ListInsert(LinkList &L, int i, int e){
if (i<1)
return false;
LNode *p = L; //指针p指向当前扫描结点,目前指向头结点,是第0个
int j = 0; //当前p指向第几个结点
while (p!=NULL && j<i-1) //循环指到第i-1个结点
{
p = p->next;
j++;
}
if(p == NULL) //i值不合法
return false;
LNode *s = (LNode*)malloc(sizeof(LNode)); //插入的新结点
s->data = e;
s->next = p->next;
p->next = s; //将结点s连到p后
return true;
}
按位序插入(无头结点)
#define NULL 0
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
//在第i个位置插入数据e(带头结点)
bool ListInsert(LinkList &L, int i, int e){
if (i<1)
return false;
if (i == 1) { //插入第1个结点操作不同
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s;
return true;
}
//下面和带头结点一样操作
LNode *p = L; //指针p指向当前扫描结点,目前指向头结点,是第0个
int j = 0; //当前p指向第几个结点
while (p!=NULL && j<i-1) //循环指到第i-1个结点
{
p = p->next;
j++;
}
if(p == NULL) //i值不合法
return false;
LNode *s = (LNode*)malloc(sizeof(LNode)); //插入的新结点
s->data = e;
s->next = p->next;
p->next = s; //将结点s连到p后
return true;
}
不带头结点写代码不方便,推荐带头结点