基础知识:
1.带头结点的单链表中头结点没有存放数据只存放了指向位序为1的结点的指针(可以近似理解为位序为0 的结点,但实际上结点的位序从1开始);
2.所需结构体的定义
typedef struct LNode{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
代码实现:
bool ListInsert(LinkList &L,int i,ElemType e)
{
if ( i < 1 ) //如果 i < 1,所找的位序不合法
retuen false;
LNode *p; //指针 p 指向当前扫描到的结点
int j=0; // j 表示当前指向的是第几个结点
p = L; // L 指向头结点(不存数据),将 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
s -> data =e; //将要插入的值 e 放进结点 s 的数据域
s -<next = p -> next; //结点 s 的指针指向下一个结点(即原来结点 p 指向的结点)
p -> next = s; //将结点 p 指向结点 s
return true;
}
Notes:
1. s -<next = p -> next; p -> next = s; 这两步的顺序不能颠倒
2. 主语位序和结点,位序=结点-1