题目1518:反转链表
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:2235
解决:842
-
题目描述:
-
输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)
-
输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。
-
输出:
-
对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。
-
样例输入:
-
5 1 2 3 4 5 0
-
样例输出:
-
5 4 3 2 1 NULL
-
#include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; }Node; Node * CreatList(int n) { Node *head=(Node *)malloc(sizeof(Node)); Node *node=head; int i; int x; for(i=0;i<n;++i) { scanf("%d",&x); Node *nodenew=(Node *)malloc(sizeof(node)); nodenew->data=x; node->next=nodenew; node=nodenew; } head=head->next; node->next=NULL; return head; } Node * ReverseList(Node * head) { Node *prev,*next; prev=NULL; while(head!=NULL) { next=head->next; head->next=prev; prev=head; head=next; } return prev; } int main() { int n; while(scanf("%d",&n)!=EOF) { if(0==n) { printf("NULL\n"); } else { Node *head=CreatList(n); head=ReverseList(head); printf("%d",head->data); head=head->next; while(head!=NULL) { printf(" %d",head->data); head=head->next; } printf("\n"); } } return 0; } /************************************************************** Problem: 1518 User: road Language: C Result: Accepted Time:150 ms Memory:2364 kb ****************************************************************/