标签:blog http io ar os 使用 sp for on
题目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;
}
标签:blog http io ar os 使用 sp for on
原文地址:http://blog.csdn.net/hackcoder/article/details/41790515