5--链表输出

/*
题目:
(1)首先写出单链表
(2)对链表进行方向输出

解题思路:
(a)使用stack,后进先出的策略。
(b)递归

*/

#include <stdio.h>
#include <stdlib.h>
#include <stack>
#include <iostream>
using namespace std;

typedef struct ListNode
{
    int m_nValue;
    struct ListNode *m_pNext;
} lNode;

void listAddNode(lNode *head)
{
    lNode *p = head, *p_Inter = NULL;

    if (!(p_Inter = ((lNode *)malloc(sizeof(lNode)))))
    {
        printf("the memery is don‘t create it\n");
        return;
    }
    p_Inter->m_pNext = NULL;

    int data;
    printf("请输入数字:\n");
    scanf_s("%d", &data);
    p_Inter->m_nValue = data;

    while (p->m_pNext != NULL)
    {
        p = p->m_pNext;
    }

    p->m_pNext = p_Inter;

}

lNode* createList(lNode *head)
{
    if (!(head = ((lNode *)malloc(sizeof(lNode)))))
    {
        printf("the memery is don‘t create it\n");
        return NULL;
    }
    head->m_pNext = NULL;
    int data;
    printf("请输入数字:\n");
    scanf_s("%d", &data);
    head->m_nValue = data;

    lNode *p = head, *p_Inter = NULL;
    char X_cin = ‘Y‘;
    while (true)
    {
        printf("是否继续添加:N/n \n");
        cin >> X_cin;

        if (X_cin == ‘y‘ || X_cin == ‘Y‘)
        {
            ;
        }
        else if (X_cin == ‘N‘ || X_cin == ‘n‘)
        {
            return head;
        }
        else
        {
            ;
        }

        listAddNode(p);

    }

}

void showList(lNode *head)
{
    if (NULL == head)
    {
        cout << "list is empty \n" << endl;
        return;
    }

    lNode *p = head;

    while (p != NULL)
    {
        printf("%d\n", p->m_nValue);
        p = p->m_pNext;
    }

}

void reversePut(lNode *point)
{
    stack <int> stack_rev;

    lNode *p = point;

    while (p != NULL)
    {
        stack_rev.push(p->m_nValue);
        p = p->m_pNext;
    }
    while (!stack_rev.empty())
    {
        cout << stack_rev.top() << endl;
        stack_rev.pop();
    }
}

int main()
{
    lNode *head = NULL;

    head = createList(head);
    showList(head);
    reversePut(head);

    return 0;
}
时间: 2024-11-05 12:06:32

5--链表输出的相关文章

华为机试—逆序链表输出

题目描述:   将输入的一个单向链表,逆序后输出链表中的值.链表定义如下: typedef struct tagListNode { int value; struct tagListNode *next; }ListNode; 要求实现函数:   void converse(ListNode **head); [输入]head:    链表头节点,空间已经开辟好 [输出]head:    逆序后的链表头节点 [返回]无 [注意]只需要完成该函数功能算法,中间不需要有任何IO 的输入输出 #in

关于链表输出第K到第1个节点值的问题

关于链表 链表是一种动态的数据结构,因为在创建链表时无需知道链表的长度,当插入一个节点时,只需要为新的节点分配内存,其空间效率和数组相比要高,但是每次都要创建空间所以时间不是很高 单向链表定义节点 struct ListNode {     int m_value;     ListNode* m_pNext; }; 在链表后面添加节点 void AddToTail(ListNode** pHead,int value)//时间效率O(N) {     ListNode* pnewNode=ne

C++建立动态链表输出学生学号和成绩时出错

2ztpt1比人噶穆灿悍<http://weibo.com/20180414pp/230927983203911504498688> 2hb77n械豆厥非池瘟<http://weibo.com/tNhBap/230927983074789390290944> kxjz9r缸廊月匙独悸<http://weibo.com/NlGjZp/230927983076501475827712> 8991nl椎塘按四伦叭<http://weibo.com/20180414p/2

[华为机试练习题]24.删除链表中的反复节点、剩余节点逆序输出

题目 描写叙述: 题目描写叙述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容反复的节点(反复的节点所有删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容反复的节点(反复的节点所有删除).剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]仅仅须要完毕该函数功

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

删除链表中的重复节点、剩余节点逆序输出

#include <stdlib.h> #include <algorithm> #include <functional> #include <iostream> #include "oj.h" using namespace std; /* 功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 输入: pstrIn: 输入一个不带头节点的单向链表 输出:

链表的创建,插入,删除,输出基本操作

#include<stdio.h>#include<cstdlib> struct student  //定义一个学生结点,结点包括值域和指针域{ int num;//学号 char name[20];//姓名 char address[20];//地址 struct student *next;//定义结点的指针域,指向下一个结点};typedef struct student LIST;LIST *CreateList();LIST *InsertNode(LIST *h,LI

hihocoder1198 Memory Allocating Algorithm(链表~)

题意: 小Hi和小Ho最近在研究内存分配的机制,他们写了一个比较简单的内存.内存可以表示成M个连续的存储空间,下标为0..M-1: 每当有数据写入时,内存分配程序会从下标0开始向右找一块足够存放下该数据的区域,将该数据写入.比如写入一个长度为2的数据,因为是第一个数据,我们用1来表示: 之后继续依次写入长度为3的数据和长度为2的数据,则有: 当数据足够多后,我们可能会遇到剩下的空间不足以写下新的数据.这时内存程序会从最早的数据开始进行删除.假设我们现在写到第8个数据把内存写满了: 这时我们需要写

1215.2——单链表

链表的结点结构 ┌───┬───┐ │data|next│ └───┴───┘ data域--存放结点值的数据域 next域--存放结点的直接后继的地址(位置)的指针域(链域) 实例:从终端输入5个姓名,单链表输出 typedef struct node{ char * name; struct node *next; }Node;  // 定义一个结构体 void myfree(Node * pHead){   //从头指针开始释放 while (pHead != NULL) { Node *

单链表:头插法和尾插法

头插法: linklist *CreateList_Front() { linklist *head, *p; char ch; head = NULL; printf("依次输入字符数据(‘#’表示输入结束):\n"); ch = getchar(); while(ch != '#') { p = (linklist*)malloc(sizeof(linklist)); p->data = ch; p->next = head; head = p; ch = getcha