九度 从尾到头打印链表

/*
 * c.cpp
 *
 *  Created on: 2013-10-7
 *      Author: wangzhu
 */

#include<cstdio>
#include<stack>
#include<iostream>
using namespace std;
struct Node {
    int key;
    Node* next;
};
/**
 * 尾插法:超时
 */
void addToTail(Node* root, int value) {
    Node* node = new Node();
    node->key = value;
    node->next = NULL;
    if (root->next == NULL) {
        root->next = node;
    } else {
        Node* tempNode = root->next;
        while (tempNode->next != NULL) {
            tempNode = tempNode->next;
        }
        tempNode->next = node;
    }
}

/**
 * 头插法:Accepted
 */
void addTohead(Node *root, int value) {
    Node* tempNode = root->next;
    Node* node = new Node;
    node->key = value;
    node->next = tempNode;
    root->next = node;
}

void printToStack(Node* root) {
    stack<Node*> nodeStack;
    Node* tempNode = root->next;
    while (tempNode != NULL) {
        nodeStack.push(tempNode);
        tempNode = tempNode->next;
    }
    while (!nodeStack.empty()) {
        tempNode = nodeStack.top();
        printf("%d\n", tempNode->key);
        nodeStack.pop();
    }
}

void diqu(Node* node) {
    if (node != NULL) {
        if (node->next != NULL) {
            diqu(node->next);
        }
        printf("%d\n", node->key);
    }
}
void print(Node *node) {
    while (node != NULL) {
        printf("%d\n", node->key);
        node = node->next;
    }
}
int main() {
    freopen("data.in", "r", stdin);
    int n;
    Node* root = new Node();
    root->next = NULL;
    while(~scanf("%d",&n)) {
        if( 0 > n) {
            break;
        }
        //addToTail(root,n);
            addTohead(root,n);
        }
        //printToStack(root);
        print(root->next);
        return 0;
    }

 

posted @ 2013-10-07 18:03  qingyezhu  阅读(235)  评论(0编辑  收藏  举报