#includetypedef struct link
{ int data;
struct link *next;
}node;
node *createList()
{
node *pre, *cur, *head;
int temp;
head = (node *)malloc(sizeof(node));
if(head == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
head->data = 0;
head->next = NULL; /*这样负值效率较低,绝大部分都在做无用功,
只要在这个for循环后把最后一个赋予NULL就可以了*/
pre = head;
printf("Input data:");
scanf("%d", &temp);
while(temp!=0)
{
cur = (node *)malloc(sizeof(node));
if(cur == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
cur->data = temp;
cur->next = NULL;
pre->next = cur;
pre = cur;
printf("Input data:");
scanf("%d", &temp);
}
return head;
}
void printList(node **head)/*实际上形参为 node * head就可以了,不知道你为啥这么写,没必要*/
{
node *temp;
temp = (*head)->next;
if(head == NULL)
return;
while(temp)
{
printf("\t%d", temp->data);
temp = temp->next;
}
printf("\nOutput complete!\n");
}
node *reverseRecursive(node *p, node *head)
{
node *temp ;
if(p->next == NULL)
{
head->next = p;
return p;
}
temp= reverseRecursive(p->next, head);
temp->next = p;
p->next=NULL;/*这里要个p的指针域赋予NULL*/
return p;
}
int main()
{
node *head = NULL;
head = createList();
printList(&head);
/*ReverseLink(head);*/
reverseRecursive(head->next, head);
printList(&head);
getch();
return 0;
}