zoukankan      html  css  js  c++  java
  • 从尾到头打印链表

    
    
    题目描写叙述:

    输入一个链表。从尾到头打印链表每一个节点的值。

    输入:

    每一个输入文件仅包括一组測试例子。
    每一组測试案例包括多行。每行一个大于0的整数,代表一个链表的节点。

    第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完成。

    -1本身不属于链表。

    输出:

    相应每一个測试案例。以从尾到头的顺序输出链表每一个节点的值,每一个值占一行。

    例子输入:
    1
    2
    3
    4
    5
    -1
    
    例子输出:
    5
    4
    3
    2
    1
    //
    //  main.c
    //  从尾到头打印链表
    //
    //  Created by 李亚坤 on 14-9-29.
    //  Copyright (c) 2014年 李亚坤. All rights reserved.
    //
    
    #include <stdio.h>
    
    typedef struct ListElmt_    //链表元素声明
    {
        void *data;
        struct ListElmt_ *next;
    }ListElmt;
    
    
    typedef struct List_        //链表声明
    {
        ListElmt *head;
        ListElmt *tail;
        int size;
    }List;
    
    void InitList(List *list)   //初始化链表
    {
        list->size = 0;
        list->head = NULL;
        list->tail = NULL;
        return;
    }
    
    int Insert_next(List *list, ListElmt *element, void *data)  // 在element元素后面插入
    {
        ListElmt *new_element;
        new_element = (ListElmt *)malloc(sizeof(ListElmt));
        if (new_element == NULL) {
            return -1;
        }
        
        new_element->data = data;
        new_element->next = NULL;
        
        if (element == NULL) {
            if (list->size == 0) {
                list->tail = new_element;
            }
            else
            {
                new_element->next = list->head;
            }
            list->head = new_element;
        }
        else
        {
            if (element->next == NULL) {
                list->tail = new_element;
            }
            
            new_element->next = element->next;
            element->next = new_element;
        }
        list->size++;
        return 0;
    }
    
    void print_list_int(List *list)         // 输出链表每个元素
    {
        if (list->size == 0) {
            return;
        }
        
        ListElmt *element;
        
        for (element = list->head; element != list->tail; element = element->next) {
            printf("%d
    ", *((int *)(element->data)));
        }
        printf("%d
    ", *((int *)(element->data)));
        
        return;
    }
    
    int main(int argc, const char * argv[]) {
        int *input, i;
        input = (int *)malloc(sizeof(int));
        
        List * l;
        l = (List *)malloc((sizeof(List)));
        InitList(l);
        
        do{
            scanf("%d", &input[i]);
            input = (int *)realloc(input, sizeof(int) * (i+1));
            if (input[i] > 0) {         // 存入正整数
                Insert_next(l, NULL, &input[i]);
            }
            i++;
        }while (input[i-1] != -1);
        
        print_list_int(l);
        return 0;
    }
    


  • 相关阅读:
    linux软件相关基操--基于Debian
    Spring AOP实现接口调用异常时重试
    Kafka
    zookeeper集群
    zookeeper客户端之curator
    zk权限模块
    zookeeper简介及基操
    CustomTool
    SpringBoot+Mybatis配置多数据源,分包方式
    mysql操作相关错误解决办法
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5091487.html
Copyright © 2011-2022 走看看