题目1518:反转链表
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1952解决:741
题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
(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<iostream>
using namespace std;
struct ListNode{
int value;
ListNode* next;
};
//反转链表
ListNode* reverseList(ListNode* root){
if(root==NULL){
return NULL;
}
if(root->next==NULL){
return root;
}
ListNode* pNode = root;
ListNode* preNode = NULL;
while(pNode){
ListNode* pNext = pNode->next;
pNode->next = preNode;
preNode = pNode;
pNode = pNext;
}
return preNode;
}
int main(){
int n;
ListNode* root;
ListNode* pNode;
ListNode* pNew;
while(scanf("%d",&n)){
if(n<=0){
printf("NULL\n");
continue;
}
//构造链表
for(int i=0;i<n;i++){
pNew = new ListNode();
scanf("%d",&pNew->value);
pNew->next=NULL;
if(i!=0){
pNode->next = pNew;
pNode = pNew;
}else{
pNode = root = pNew;
}
}
//反转
ListNode* reverseNode = reverseList(root);
while(reverseNode->next){
printf("%d ",reverseNode->value);
reverseNode = reverseNode->next;
}
printf("%d\n",reverseNode->value);
}
return 0;
}