/** * 算法2.20,在带头结点的单链线性表L的第i个元素之前插入元素e */ Status ListInsert(LinkList &L, int i, ElemType e) { Link h, s; if (!LocatePos(L, i-1, h)) return ERROR; if (!MakeNode(s, e)) return ERROR; if (h == L.tail) L.tail = s; // 修改尾指针 InsFirst(h, s); //对于从第不个结点开始的链表,第i-1个结点是它的头结点 L.len++; return OK; }
Status LinkListInsert(LinkList *linklist, int position, ElemType e) { Link *t; //只能插入到[0,len)之间的位置,不会改变尾结点 Link *newnode; if (!linklist) return ERROR; if (position != 0) { if (LocatePos(*linklist, position - 1, &t) == ERROR)return ERROR; } else { t = linklist->head; } if (MakeNode(&newnode, e) == ERROR)return ERROR; if (InsFirst(t, newnode) == ERROR)return ERROR; linklist->len++; return OK; }
int main() { LinkList L; InitList(&L); Link test=NULL; ElemType array[10] = {10,9,8,7,6,5,4,3,2,1}; /*ElemType array[10] = {0,9,8,7,6,5,4,3,2,1};*/ CreateListByArray(array,sizeof(array)/sizeof(ElemType),&L,&InsFirst); printf("Length= %d\n",ListLength(L)); LocatePos(L,9,&test); printf("第9个节点数据为%d\n",test->data) ; printf("%s\n","------------------------------------") ; ListTraverse(L,&Myvist); DestroyList(&L); return 0; }