一、插入結點
s->next = p->next; p->next = s;
具體代碼實現:
Status ListInsert(LinkList *L, int i,ElemType e)
{
int j;
p = *L;
j=1;
if(!p||j>i)
return ERROR;
while(p&&j<i)
{
p = p->next;
++j;
}
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
二、刪除結點
p->next = p->next->next,也就是:q=p->next;p->next=q->next
具體代碼:
Status ListDelete(LinkList *L, int i,ElemType *e)
{
int j;
LinkList p,q;
p = *L;
j = 1;
if(!p->next||j>i)
return ERROR;
while(p->next&&j<i)
{
p = p->next;
++j;
}
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
三、單鏈表整表創建
跟插入類似,但是加入了一個循環生產一整個鏈表
插入的方式可以插在初始的頭前面,也可以在頭的後面。
具體代碼:
void CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for(i=0;i<n;i++)
{
p =(LinkList)malloc(sizeof(Node));
p->data = rand()%100 +1;
p->next = (*L)->next;
(*L)->next = p;
}
}
void CreateListHead(LinkList *L,int n)
{
LinkList p,r;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
r = *L;
for(i=0;i<n;i++)
{
p = (Node*)malloc(sizeof(Node));
p->data = rand()%100+1;
r->next =p;
r=p;
}
r->next = NULL;
}
四、單鏈表整表刪除
感覺也是跟刪結點差不多,只不過也是加了個循環
Status ClearList(LinkList *L)
{
LinkList p,q;
p =(*L)->next;
while(p)
{
q= p->next;
free(p);
p=q;
}
(*L)->next = NULL;
return OK;
}