需求描述:逆序打印单链表,不能修改链表结构,不能使用递归实现
需求分析:1、基于栈的先进后出特性,先将单链表的所有结点入栈
2、然后将栈中元素出栈即可
typedef struct LinkNode {
int val;
struct LinkNode* next;
}LinkNode;
// 创建单链表
void creatLinkList(LinkNode* head);
// 逆序打印链表 - 基于栈
void linkListReversePrintBaseStack(LinkNode* node);
int main() {
//创建单链表
LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode));
if(head == NULL) {exit(-1);}
head->next = NULL;
LinkNode* curr = head;
creatLinkList(curr);
//逆序打印链表 - 基于栈
linkListReversePrintBaseStack(head->next);
printf("n");
return 0;
}
#pragma mark - 创建单链表
void creatLinkList(LinkNode* head) {
for(int i = 0;i < 5;i++) {
LinkNode* node = (LinkNode*)malloc(sizeof(LinkNode));
if(node == NULL) {exit(-1);}
node->val = 100 * (i + 1);
node->next = head->next;
head->next = node;
head = head->next;
}
}
#pragma mark - 逆序打印链表 - 基于栈
void linkListReversePrintBaseStack(LinkNode* node) {
int top = 0 , s[5];
while (node) {
s[top++] = node->val;
node = node->next;
}
while (top) {
printf("%d ",s[--top]);
}
}