首页 > 代码库 > 剑指offer系列源码-反转链表
剑指offer系列源码-反转链表
题目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
oj地址
显示超时,大家看出问题,就帮忙解决吧。
#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; }
剑指offer系列源码-反转链表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。