链表操作

#include<stdio.h>
#include<iostream>
using namespace std;
struct stack{ // 定义栈结构,用于实现链表反向输出
    int data[100];
    int top;
};
struct node{
    int data;
    struct node *next;
};

struct node *createList(int n){  //创建n个结点链表
    struct node *head;
    head=(struct node *)malloc(sizeof(struct node));
    struct node *p=head;
    struct node *q;
    for(int i=1;i<n;i++){
        q=(struct node *)malloc(sizeof(struct node));
        cin>>p->data;
        p->next=q;
        p=q;
    }
    cin>>p->data;
    p->next=NULL;
    return head;
}
void printlistnode(struct node* head){ // 正想打印链表 
    struct node* p=head;
    while(p != NULL){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
void reverseprintlistnode(struct node *head){ //反向打印链表 利用栈结构实现
    struct node* p=head;
    struct stack s;
    s.top=0;
    while(p != NULL){
        s.data[s.top] = p->data;
        ++s.top;
        p=p->next;
    }
    while(s.top>0){
        --s.top;
        cout<<s.data[s.top]<<" ";
    }
    cout<<endl;
}
//递归实现反向打印链表结点
void reverseprintlistnode_acle(struct node *head){
    if(head != NULL){
        if (head->next != NULL)
            reverseprintlistnode_acle(head->next);
        cout<<head->data<<" ";
    }
}
int main(){
    int n;
    struct node* head;
    cin>>n;
    head=createList(n);
    printlistnode(head);
    reverseprintlistnode(head);
    reverseprintlistnode_acle(head);
    cout<<endl;
    free(head);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值