九度 从尾到头打印链表

/*

 * 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;

    }

 

你可能感兴趣的:(链表)