插入操作,即在表L的第i个位置上插入指定元素e,由于不带头结点的单链表不存在“第0个结点”因此i = 1时需要进行特殊的处理。其余情况思路为:找到第i-1个结点,将新结点插入该结点之后。
typedef struct LNode {
int data;
struct LNode *next;
}LNode,*LinkList;
bool ListInsert(LinkList &L,int i,int e)
{
if(i < 1)
return false;
//不带头结点的单链表需要特殊考虑 此时需要将头指针指向新的结点
if(i == 1)
{
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L=s;
return true;
}
//首先需要找到i-1的位置
int j = 1;//j就是p指针指向的结点
LNode *p;
p = L;//p此时为第一个结点 注意不是头结点
while(p != NULL && j < i - 1)
{
p= p->next;
j++;
}
if(p == NULL)
return false;//此时i的值不合法
//此时j = i - 1; p 为第i-1个结点
//建立一个新的结点来存放需要插入的该数据
LNode *s = (LNode*) malloc(sizeof(LNode)) ;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}