剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1511
-
题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
-
输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
-
输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
-
样例输入:
-
1 2 3 4 5 -1
-
样例输出:
-
5 4 3 2 1
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode;
void addNode(SNode** vHead, int vData)
{
if (*vHead == NULL)
{
(*vHead) = (SNode*)malloc(sizeof(SNode));
(*vHead)->data = vData;
(*vHead)->next = NULL;
return;
}
SNode* Node = (SNode*)malloc(sizeof(SNode));
Node->data = vData;
Node->next = *vHead;
*vHead = Node;
}
void printList(const SNode* vHead)
{
const SNode* Node = vHead;
while (Node != NULL)
{
printf("%d\n", Node->data);
Node = Node->next;
}
}
void destoryList(SNode** vHead)
{
SNode *Node;
while (*vHead != NULL)
{
Node = (*vHead)->next;
free(*vHead);
*vHead = Node;
}
free(vHead);
vHead = NULL;
}
int main()
{
int Data;
SNode** Head;
Head = (SNode**)malloc(sizeof(SNode*));
*Head = NULL;
while (scanf("%d", &Data) && Data != -1)
{
addNode(Head, Data);
}
printList(*Head);
destoryList(Head);
//system("pause");
return 0;
}
/**************************************************************
Problem: 1511
User:
Language: C
Result: Accepted
Time:90 ms
Memory:3948 kb
****************************************************************/