前言
typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList;
插入
如图所示总共分为四步:
1.找到插入的位置的前一位置
2.设置要插入的节点的数据域
3.与其前驱节点相连接
4.与其后继节点相连接
Status ListInsert(LinkList &list,int i, ElemType e){ p = list; j =0; //找到要插入的位置的前一个位置 while (p && j<i-1){ p = p->next; j++; } if (!p || j > i-1) return ERROR; s = (LinkList)malloc(sizeof(LNode)); s->data = e; p->next = s; s->next = p-next; return OK; }
删除
如图所示总共分为四步:
1.找到删除的位置的前一位置
2.将要删除的节点的后继节点与其前驱节点相连,使其断开链表
3.获取要删除节点的数据域(不必须要)
4.释放删除的节点空间
Status ListDelete(LinkList &list,int i, ElemType &e){ p = list; j =0; //找到要删除的位置的前一个位置 while (p->next && j<i-1){ p = p->next; j++; } if (!p->next || j > i-1) return ERROR; q = p->next;//得到要删除的节点引用 p->next = q->next;//将要删除的后继节点与其前驱节点相连, e = q->data; free(q);//释放删除的节点 return OK; }
合并
Status MergeList(LinkList &La,LinkList &Lb, LinkList &Lc){ pa = La->next; pb = Lb->next; Lc = pc = La; //表Lc的头节点 while (pa && pb){ if (pa->data <= pb->data){ pc ->next = pa; pc = pa; pa = pa->next; }else{ pc ->next = pb; pc = pb; pb= pb->next; } //将剩余的节点插入pc中 pc->next = pa?pa:pb; free(Lb); }