下面康康刷的链表题:
任务:
给定程序中已建立一个带有头结点的单向链表,在 main函数中将多次调用 fun函数,每调用一次 fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
这个题主要也是填写fun函数内部的语句。
源代码:
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list {
int data;
struct list *next;
} SLIST;
void fun(SLIST *p) {
SLIST *t, *s;
t = p->next;
s = p;
while (t->next != NULL) {
s = t;
t = t->next;
}
printf(" %d ", *t);
s->next = NULL;
free(s->next);
}
SLIST *creatlist(int *a) {
SLIST *h, *p, *q;
int i;
h = p = (SLIST *) malloc(sizeof(SLIST));
for (i = 0; i < N; i++) {
q = (SLIST *) malloc(sizeof(SLIST));
q->data = a[i];
p->next = q;
p = q;
}
p->next = 0;
return h;
}
void outlist(SLIST *h) {
SLIST *p;
p = h->next;
if (p == NULL)
printf("\nThe list is NULL!\n");
else {
printf("\nHead");
do {
printf("->%d", p->data);
p = p->next;
} while (p != NULL);
printf("->End\n");
}
}
int main() {
SLIST *head;
int a[N] = {11, 12, 15, 18, 19, 22, 25, 29};
head = creatlist(a);
printf("\nOutput from head:\n");
outlist(head);
printf("\nOutput from tail: \n");
while (head->next != NULL) {
fun(head);
printf("\n\n");
printf("\nOutput from head again :\n");
outlist(head);
}
return 0;
}
运行结果(截取部分):