建表、删除
typedef struct LNode { int data; struct LNode *next; }*Slink; LNode *p,*q;//指向链表节点的p,q指针 Slink H;//指向链表,头指针 void InitList(Slink &L) { L = new LNode; if(!L) cout<<"空间分配失败"; L->next = NULL; } void DestroyList(Slink &L) { while(L) { p = L; L = L->next; delete p; }
L = NULL;//头结点占有的空间被释放,但指针L的值不变,为安全起见,置L为空 }
搜索
void GetElem(Slink &L,int pos,int &e) { int i = 0; p = L; while(p && i<pos) { i++; p = p->next; } if(p == NULL)cout << "false"; else e = p->data; p = NULL; }
插入
void InsertElem(Slink &L,int pos,int &e) { int i = 0; p = L; while(p && i < pos-1) { i++; p = p->next; } if(i != pos-1)cout<<"false"; else { q = new LNode; q->data = e; q->next = p->next; p->next = q; } p = NULL; q = NULL; }
删除
bool ListDelete(SLink &L,int pos,int &e) { p = L;j = 0;
while(p->next && j < pos-1) p = p->next;
if((!p->next) || j > pos-1)return FALSE; q = p->next; p->next = q->next; e = q->next; delete(q);//释放节点空间
return TRUE; }
交换前后两段
void exchange_L(SLink &L,int m) { if(m && L->next) { p = L->next; k = 1; while(k < m && p) p = p->next,++k; if(p && p->next) { ha = L->next; L->next = p->next; p->next = NULL; q = L->next; while(q->next)q = q->next; q->next = ha; } } }