您的位置:首页 > 其它

题目1511:从尾到头打印链表

2013-12-21 01:35 239 查看
题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

输入:

每个输入文件仅包含一组测试样例。

每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。

输出:

对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

样例输入:
1
2
3
4
5
-1


样例输出:
5
4
3
2
1


#include <iostream>
using namespace std;

struct LinkNode
{
int val;
LinkNode *next;
LinkNode(int x):val(x),next(NULL){};
};

LinkNode *initList()
{
LinkNode *root = NULL;
LinkNode *p, *q;
int value;
while(cin>>value&&value!=-1)
{
p = new LinkNode(value);
if(!root)
{
root = p;
q = root;
continue; //if not, when n =1, it's a loop;
}
q->next = p;
q = q->next;
}
return root;
}

LinkNode *reverse(LinkNode *root)
{
if(!root)
return NULL;
LinkNode *p, *q, *temp;
p = root;
q = root->next;

while(q)
{
temp = q;
q = q->next;
temp->next = p;
p = temp;
}
root->next = NULL;
return p;
}

void printList(LinkNode *root)
{
while(root)
{
cout<<root->val;
root = root->next;
cout<<endl;
}
}

int main()
{
LinkNode *root,*newRoot;
root = initList();
newRoot = reverse(root);
printList(newRoot);
return 0;
}


用cin cout最后一个case超时, 改成printf 和 scanf可过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: