- 题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
- 输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于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; }