C语言如何用递归实现链表的逆序输出、释放、倒序?求大神给出这三段代码。谢谢!

如题所述

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

typedef struct node {
int data;
struct node *next;
}*pNode,*LinkList,LNode;

LinkList getEmptyList() {
LinkList head = (pNode)malloc(sizeof(LNode));
head->next = NULL;
return head;
}

void insertNode(LinkList head, int data) {
int flag = 1;
pNode p,q = (pNode)malloc(sizeof(LNode));
q->data = data;
if(head->next == NULL) {
head->next = q;
q->next = NULL;
return;
}
for(p = head; p->next && flag; p = p->next) {
if(p->next->data > data) {
q->next = p->next;
p->next = q;
flag = 0;
}
}
if(flag) {
p->next = q;
q->next = NULL;
}
}

void show(LinkList head) {
pNode p = head->next;
while(p) {
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}

void showReverse(LinkList p) {
if(p->next) showReverse(p->next);
printf("%d ",p->data);
}

LinkList reverse(pNode &p, pNode &q) {
pNode t;
t = p->next;
p->next = q;
q = p;
p = t;
if(p) reverse(p,q);
return q;
}

void destory(LinkList head) {
pNode q,p = head;
while(p) {
q = p;
p = q->next;
free(q);
}
}

int main() {
LinkList head = getEmptyList();
pNode q = NULL;
int i,n = 18;
srand((unsigned)time(NULL));
for(i = 0;i < n;i++)
insertNode(head,rand()%100);
printf("原链表:\n");
show(head);
printf("反向显示:\n");
showReverse(head->next);
printf("\n");
head->next = reverse(head->next,q);
printf("反向后的正向显示\n");
show(head);
destory(head);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答