一、插入结点
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;
}