#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct Node{
int Data;
struct Node *Next;
};
void Sq_insert(struct Node *L,int num){/*链表顺序插入*/
struct Node *p=L,*q;
while(p->Next!=NULL&&p->Next->Data<num)
p=p->Next;
q=(struct Node *)malloc(sizeof(struct Node));
q->Data=num;
q->Next=p->Next;
p->Next=q;
}
void show(struct Node *L){
struct Node *p;
p=L->Next;
while(p!=NULL){
printf("%d\t",p->Data);
p=p->Next;
}
printf("\n");
}
struct Node *recursion_reverse(struct Node *cur){/*递归反转*/
if(cur==NULL||cur->Next==NULL){
return cur;
}
struct Node *rev;
rev=recursion_reverse(cur->Next);
cur->Next->Next=cur;
cur->Next=NULL;
return rev;
}
void reverse(struct Node *L){/*链表反转*/
L->Next=recursion_reverse(L->Next);
}
int main(){
struct Node *L=(struct Node *)malloc(sizeof(struct Node));
L->Next=NULL;
srand(time(NULL));/*随机数种子*/
int i;
for(i=0;i<10;i++){
Sq_insert(L,rand());/*生成随机数并插入*/
}
show(L);
reverse(L);
show(L);
return 0;
}
C语言递归实现链表反转(带头节点)
最新推荐文章于 2024-08-16 17:09:46 发布