69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //定义单链表节点类型
{
ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L)
{
L = (LinkList *)malloc(sizeof(LinkList));
L->next = NULL;
}
void DestroyList(LinkList *&L)
{
LinkList *p = L, *q = p->next;
while (q)
{
free(p);
p = q;
q = p->next;
}
free(p);
}
int ListEmpty(LinkList *L)
{
return(L->next == NULL);
}
int ListLength(LinkList *L)
{
LinkList *p = L; int i = 0;
while (p->next != NULL)
{
i++;
p = p->next;
}
return (i);
}
void DispList(LinkList *L)
{
LinkList *p = L->next;
while (p != NULL)
{
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
int GetElem(LinkList *L, int i, ElemType &e)
{
int j = 0;
LinkList *p = L;
while (j<i && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return 0;
else
{
e = p->data;
return 1;
}
}
int LocateElem(LinkList *L, ElemType e)
{
LinkList *p = L->next;
int n = 1;
while (p != NULL && p->data != e)
{
p = p->next;
n++;
}
if (p == NULL)
return (0);
else
return (n);
}
int ListInsert(LinkList *&L, int i, ElemType e)
{
int j = 0;
LinkList *p = L, *s;
while (j <i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL) //未找到第i-1个节点
return 0;
else //找到第i-1个节点*p
{
s = (LinkList *)malloc(sizeof(LinkList));//创建新节点*s
s->data = e;
s->next = p->next; //将*s插入到*p之后
p->next = s;
return 1;
}
}
int ListDelete(LinkList *&L, int i, ElemType &e)
{
int j = 0;
LinkList *p = L, *q;
int j = 0;
LinkList *p = L, *q;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL) //未找到第i-1个结点
return 0;
else
{
q = p->next;
if (q == NULL)
return 0;
e = q->data;
p->next = q->next; //c从单链表中删除*q结点
free(q);
return 0;
}
return 0;
}
int main(void)
{
return 0;
}
ListDelete函数有问题,循环应该是多了一层。建议对比一下你的代码;