从尾部到头部打印链表

从尾部到头部打印链表,由于递归,比较简单,所以方法1,使用递归,

#include<stdio.h>
#include<stdlib.h>
#include<stack>
struct LinkNode {
    int data;
    struct LinkNode *next;
};

struct LinkNode *createList()
{
    int len = 0;
    printf("input list len\n");
    scanf("%d", &len);
    printf("input list elements\n");
    struct LinkNode *head = NULL;
    struct LinkNode *p = head;
    for (int i = 0; i < len; i++) {
	int k;
	scanf("%d", &k);
	struct LinkNode *e = (LinkNode *) malloc(sizeof(LinkNode *));

	e->data = k;
	e->next = NULL;
	if (head == NULL) {
	    p = head = e;
	    continue;
	}
	p->next = e;
	p = p->next;

    }
    return head;
}

void printLinkList(struct LinkNode *head)
{
    if (head == NULL) {
	return;
    }
    printLinkList(head->next);
    printf(" %d ", head->data);
}

void printLinkByStack(struct LinkNode *head)
{
    std::stack < struct LinkNode *>st;
    if (head == NULL) {
	return;
    }
    struct LinkNode *p = head;
    while (p != NULL) {
	st.push(p);
	p = p->next;
    }

    while (!st.empty()) {
	struct LinkNode *e = st.top();
	st.pop();
	printf(" %d", e->data);
    }
    printf("\n");
}


int main()
{
    struct LinkNode *head = NULL;
    head = createList();
    printf("recursion\n");
    printLinkList(head);
    printf("\n");

    printf("stack");
    printLinkByStack(head);
    printf("\n");

}

使用递归的时候,当链表的长度过长的时候,

回造成调用栈的溢出,

作者: 盛夏落木

出处: https://www.cnblogs.com/wanshuafe/

关于作者:专注云存储,文件系统领域,请多多赐教!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(wanshuafe@163.com)咨询.

原文地址:https://www.cnblogs.com/wanshuafe/p/11553393.html