首页 > 技术文章 > 从尾部到头部打印链表

wanshuafe 2019-09-19 23:54 原文

从尾部到头部打印链表,由于递归,比较简单,所以方法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");

}

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

回造成调用栈的溢出,

推荐阅读