前言
个人小记
一、代码
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LIST 10
typedef struct Node
{
int data;
struct Node* next;
}Node;
Node* init_Node(int val)
{
Node* node=(Node*)malloc(sizeof(Node));
node->data=val;
node->next=NULL;
return node;
}
Node* insert(Node* head,int pos,int val)
{
Node New_head;
New_head.next=head;
Node* p=&New_head;
for(int i=0;i<pos;i++)p=p->next;
Node* node=init_Node(val);
node->next=p->next;
p->next=node;
return New_head.next;
}
void clear_linklist(Node* head)
{
if(head==NULL)return ;
for(Node* p=head,*q;p;p=q)
{
q=p->next;
free(p);
}
head=NULL;
return ;
}
void print(Node* head)
{
Node* p=head;
while(p)
{
printf("%3d",p->data);
printf("->");
p=p->next;
}
printf("\n");
return ;
}
Node* reverlinklist_recursion(Node* head)
{
if(head==NULL||head->next==NULL)return head;
Node* tail=head->next;
Node* New_head=reverlinklist_recursion(tail);
head->next=tail->next;
tail->next=head;
return New_head;
}
int main()
{
srand((unsigned)time(0));
Node* head=NULL;
for(int i=0;i<MAX_LIST;i++)
{
head=insert(head,i,rand()%100);
}
printf("原链表为:\n");
print(head);
head=reverlinklist_recursion(head);
printf("反转链表后为:\n");
print(head);
clear_linklist(head);
return 0;
}
二、结果
原链表为:
9-> 30-> 41-> 44-> 75-> 92-> 70-> 49-> 44-> 33->
反转链表后为:
33-> 44-> 49-> 70-> 92-> 75-> 44-> 41-> 30-> 9->