7-4 单向链表4(10 分)
定义单向链表:输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序并输出。
输入输出示例:括号内为说明
输入样例:
1 2 3 4 5 6 7 -1
输出样例:
7 6 5 4 3 2 1
一个简单的链表逆置,思路比较简单。
以下是代码内容。
#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node *next; }; struct Node *createlist() { int flag=0; int x; struct Node *head,*p; p=(struct Node *)malloc(sizeof(struct Node)); while(1) { scanf("%d",&x); if(x==-1) break; struct Node *tmp; tmp=(struct Node *)malloc(sizeof(struct Node)); tmp->data=x; tmp->next=NULL; if(!flag) { head=tmp; flag=1; } else { p->next=tmp; } p=tmp; } return head; } struct Node *reverse(struct Node *head) { struct Node *newhead,*p; newhead=(struct Node *)malloc(sizeof(struct Node)); newhead->next=NULL; p=head; while(p) { struct Node *tmp=(struct Node *)malloc(sizeof(struct Node)); tmp->data=p->data; tmp->next=newhead->next; newhead->next=tmp; p=p->next; } return newhead->next; } void printfList(struct Node *head) { int flag=0; struct Node *p=head; while(p) { if(!flag) { printf("%d",p->data); flag=1; } else { printf(" %d",p->data); } p=p->next; } } int main() { struct Node *head=NULL,*head1=NULL; head=createlist(); head1=reverse(head); printfList(head1); return 0; }