
free(*L);
*L = p;
}
}
/*清空单链表*/
void ClearList(LinkList *L) {
DestroyList(L);
}
/*批量录入数据:头插法*/
void HeadCreate(LinkList *L) {
int elem; Node *p;
while (scanf_s("%d", &elem), elem != -1) {
if (*L == null) {
*L = (LinkList)malloc(sizeof(Node));
if (*L == null) exit(-1);
(*L)->data = elem;
(*L)->next = null;
}
else {
p = (LinkList)malloc(sizeof(Node));
if (!p) exit(-1);
p->data = elem;
p->next = (*L)->next;
(*L)->next = p;
}
}
}
/*批量录入数据:尾插法*/
void TailCreate(LinkList *L) {

int elem; Node *tail = null,*p;
while (scanf_s("%d", &elem), elem != -1) {
if (*L == null) {
*L = (LinkList)malloc(sizeof(Node));
if (*L == null) exit(-1);
(*L)->data = elem;
(*L)->next = null;
tail = *L;
}
else {
p = (LinkList)malloc(sizeof(Node));
if (!p) exit(-1);
p->data = elem;
p->next = null;
tail->next = p;
tail = p;
}
}
}
/*统计结点的个数*/
int TotalNum(LinkList *L) {
int count = 0;//计数器
LinkList p = *L;
for (; p; p = p->next)
++count;
return count;
}
/*在表尾追加元素value*/
void AddToTail(LinkList *L,int value) {

Node *p = null,*q = null;
if (*L == null) {
*L = (LinkList)malloc(sizeof(Node));
if (*L == null) exit(-1);
(*L)->data = value;
(*L)->next = null;
}
else {
for (p = *L; p->next != null; p = p->next)
;
q = (LinkList)malloc(sizeof(Node));
if (!q) exit(-1);
q->data = value;
q->next = p->next;
p->next = q;
}
}
/*删除第一个值是value结点*/
void Remove(LinkList *L,int value) {
if (*L == null)
return;
Node *p = *L,*q;
while (p && p->data != value) {
p = p->next;
}
if (!p) {
printf("没有该元素!\n"); return;
}
if (p == *L) {

if (p->next == null) {
*L = null;
free(p);
}
else {
p = (*L)->next;
(*L)->data = (*L)->next->data;
(*L)->next = (*L)->next->next;
free(p);
}
}
else {
if (p->next != null) {
p->data = p->next->data;
q = p->next;
p->next = q->next;
free(q);
}
else {
printf("无法删除,请采用伴随扫描指针的方法删除。\n");
return;
}
}
}
/*打印单链表*/
void Print(LinkList *L) {
if (*L == null)
return;
Node *p = *L;

for (; p; p = p->next) {
printf("%d ", p->data);
}
printf("\n");
}
/*递归逆序打印单链表*/
void FromTailPrint(LinkList *L) {
if (*L == null)
return;
FromTailPrint(&(*L)->next);
printf("%d ", (*L)->data);
}
int main() {
LinkList L;
InitList(&L);
TailCreate(&L);
fflush(stdin);
printf("打印单链表\n");
Print(&L);
printf("单链表结点的个数是:%d\n", TotalNum(&L));
printf("删除9\n");
Remove(&L, 9);
printf("打印单链表\n");
Print(&L);
printf("追加10\n");
AddToTail(&L, 10);
printf("逆序打印单链表\n");
FromTailPrint(&L);
system("pause");
return 0;
}
本文永久更新链接地址:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-117538-1.html
去年买盒感康13今年18