基礎知識:
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