Status ListInsert(LinkList &L,int i,ElemType e) { // 在不設頭結點的單鏈線性表L中第i個位置之前插入元素e int j=1; // 計數器初值為1 LinkList s,p=L; // p指向第1個結點 if(i<1) // i值不合法 return ERROR; s=(LinkList)malloc(sizeof(LNode)); // 生成新結點,以下將其插入L中 s->data=e; // 給s的data域賦值e if(i==1) // 插在表頭 { s->next=L; // 新結點指向原第1個結點 L=s; // L指向新結點(改變L) } else { // 插在表的其餘處 while(p&&j<i-1) // 尋找第i-1個結點 { j++; // 計數器+1 p=p->next; // p指向下一個結點 } if(!p) // i大於表長+1 return ERROR; // 插入失敗 s->next=p->next; // 新結點指向原第i個結點 p->next=s; // 原第i-1個結點指向新結點 } return OK; // 插入成功 } Status ListDelete(LinkList &L,int i,ElemType &e) { // 在不設頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值 int j=1; // 計數器初值為1 LinkList q,p=L; // p指向第1個結點 if(!L) // 表L空 return ERROR; // 刪除失敗 else if(i==1) // 刪除第1個結點 { L=p->next; // L由第2個結點開始(改變L) e=p->data; // 將待刪結點的值賦給e free(p); // 刪除並釋放第1個結點 } else { while(p->next&&j<i-1) // 尋找第i個結點,並令p指向其前驅 { j++; // 計數器+1 p=p->next; // p指向下一個結點 } if(!p->next||j>i-1) // 刪除位置不合理 return ERROR; // 刪除失敗 q=p->next; // q指向待刪除結點 p->next=q->next; // 待刪結點的前驅指向待刪結點的後繼 e=q->data; // 將待刪結點的值賦給e free(q); // 釋放待刪結點 } return OK; // 刪除成功 }
Status ListInsert(LinkList &L,int i,ElemType e) { // 在不設頭結點的單鏈線性表L中第i個位置之前插入元素e int j=1; // 計數器初值為1 LinkList s,p=L; // p指向第1個結點 if(i<1) // i值不合法 return ERROR; s=(LinkList)malloc(sizeof(LNode)); // 生成新結點,以下將其插入L中 s->data=e; // 給s的data域賦值e if(i==1) // 插在表頭 { s->next=L; // 新結點指向原第1個結點 L=s; // L指向新結點(改變L) } else { // 插在表的其餘處 while(p&&j<i-1) // 尋找第i-1個結點 { j++; // 計數器+1 p=p->next; // p指向下一個結點 } if(!p) // i大於表長+1 return ERROR; // 插入失敗 s->next=p->next; // 新結點指向原第i個結點 p->next=s; // 原第i-1個結點指向新結點 } return OK; // 插入成功 } Status ListDelete(LinkList &L,int i,ElemType &e) { // 在不設頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值 int j=1; // 計數器初值為1 LinkList q,p=L; // p指向第1個結點 if(!L) // 表L空 return ERROR; // 刪除失敗 else if(i==1) // 刪除第1個結點 { L=p->next; // L由第2個結點開始(改變L) e=p->data; // 將待刪結點的值賦給e free(p); // 刪除並釋放第1個結點 } else { while(p->next&&j<i-1) // 尋找第i個結點,並令p指向其前驅 { j++; // 計數器+1 p=p->next; // p指向下一個結點 } if(!p->next||j>i-1) // 刪除位置不合理 return ERROR; // 刪除失敗 q=p->next; // q指向待刪除結點 p->next=q->next; // 待刪結點的前驅指向待刪結點的後繼 e=q->data; // 將待刪結點的值賦給e free(q); // 釋放待刪結點 } return OK; // 刪除成功 }