从尾部到头部打印链表,由于递归,比较简单,所以方法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");
}
使用递归的时候,当链表的长度过长的时候,
回造成调用栈的溢出,