打印列表从尾部到头部

打印列表从尾部到头部

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

题目描写叙述:

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

输入:

每一个输入文件仅包括一组測试例子。

每一组測试案例包括多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。

当输入到-1时代表链表输入完成。-1本身不属于链表。

输出:

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

例子输入:
12345-1
例子输出:
54321

 

解法一:

1.遍历链表,使用栈结构来存储链表元素。
2.链表出栈即从尾到头打印链表。

代码:

/********************************************从尾到头打印链表by Rowandjj2014/7/18********************************************/#include<iostream>#include<stdlib.h>using namespace std;typedef struct _NODE_//单链表结点定义{	int data;	struct _NODE_ *next;}Node,*pNode;typedef struct _STACK_//栈结构{	pNode head;	int size;}Stack,*pStack;void InitStack(pStack stack){	pNode pNew = (Node*)malloc(sizeof(Node));	if(!pNew)	{		return;	}	pNew->next = NULL;	stack->head = pNew;	stack->size = 0;}void Push(pStack stack,int data){	pNode pNew = (Node*)malloc(sizeof(Node));	if(!pNew)	{		return;	}	pNew->data = data;	pNew->next = stack->head->next;	stack->head->next = pNew;	stack->size++;}int pop(pStack stack){	if(stack->size == 0)	{		return -1;	}	pNode pDel = stack->head->next;	stack->head->next = pDel->next;	int data = pDel->data;	free(pDel);	return data;}void ReversePrint(pNode phead){	Stack s;	InitStack(&s);	if(phead == NULL)	{		return;	}	pNode p = phead;	while(p != NULL)	{		Push(&s,p->data);		p = p->next;	}	int num = s.size;	for(int i =0; i < num; i++)	{		printf("%d\n",pop(&s));	}}int main(){	int data;	scanf("%d",&data);	if(data == -1)	{		exit(-1);	}	pNode pHead = (Node*)malloc(sizeof(Node));	if(!pHead)	{		exit(-1);	}	pHead->data = data;	pHead->next = NULL;	pNode p = pHead;	while(scanf("%d",&data))	{		if(data == -1)		{			break;		}		pNode pTemp = (Node*)malloc(sizeof(Node));		if(!pTemp)		{			exit(-1);		}		pTemp->data = data;		pTemp->next = NULL;		p->next = pTemp;		p = pTemp;	}	ReversePrint(pHead);	return 0;}

解法2:
递归就是简单啊。!
#include<stdlib.h>
#include<stdio.h>
typedef struct _NODE_
{
	int data;
	struct _NODE_ *next;
}Node,*pNode;
//递归 从后往前遍历链表
void Reverse(pNode pHead)
{
	if(pHead == NULL)
	{
		return;
	}
	if(pHead->next != NULL)
	{
		Reverse(pHead->next);
	}
	printf("%d\n",pHead->data);
}
int main()
{
	pNode pHead;
	int data;
	scanf("%d",&data);
	if(data == -1)
	{
		exit(-1);
	}
	pHead = (pNode)malloc(sizeof(Node));
	if(!pHead)
	{
		exit(-1);
	}
	pHead->data = data;
	pHead->next = NULL;
	pNode p = pHead;
	while(scanf("%d",&data) != -1)
	{
		if(data == -1)
		{
			break;
		}
		pNode pNew = (pNode)malloc(sizeof(Node));
		if(!pNew)
		{
			exit(-1);
		}
		pNew->data = data;
		pNew->next = NULL;
		p->next = pNew;
		p = pNew;
	}
	Reverse(pHead);
	//销毁
	pNode pt = pHead,q;
	while(pt)
	{
		q = pt->next;
		free(pt);
		pt = q;
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116718.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Python实现 —【简易】12306爬虫[通俗易懂]

    Python实现 —【简易】12306爬虫[通俗易懂]最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,因为快过年了么,要买回家的火车票,所以呢,通过分析12306网站,写了一个爬虫,现在,就将代码贴出来,分析的过程就不详细的介绍了,就是通过chorme浏览器进行分析。1#-*-coding:utf-8-*-2#@Date:2016-12-2714:26:333…

    2022年5月5日
  • 简单的关机程序(C语言)

    简单的关机程序(C语言)Windows系统自带一个名为Shutdown.exe的程序,可以用于关机操作(位置在Windows\System32下),一般情况下Windows系统的关机都可以通过调用程序shutdown.exe来实现的,同时该程序也可以用于终止正在计划中的关机操作。while循环实现:#include<stdio.h>#include<stdlib.h>intmain(){ charinput[20]={0}; system(“showdown-s-t60.

    2022年7月22日
  • 95后和05后到底差距有多大?(漫画)

    95后和05后到底差距有多大? 原文始发于微信公众号(全栈程序员社区):95后和05后到底差距有多大?(漫画)

    2021年6月21日
  • SharedPreferences采用什么方式存储数据_sharedpreferences使用方法

    SharedPreferences采用什么方式存储数据_sharedpreferences使用方法SharedPreferences(简称sp)Android平台上一个轻量级的存储辅助类,它提供了key-value键值对的接口,用来保存应用的一些常用配置,在应用中通常做一些简单数据的持久化缓存。本文将详细的分析SharedPreferences的实现方式、存储机制、如何正确使用它以及sp的性能问题等方面。SharedPreferences实现详解我们在Android开发中,如果想要保存一个相对较小的键值对集合,则应使用SharedPreferencesAPI。SharedPreferences对

    2022年8月11日
  • matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究**前言:**大学期间只学习过《常微分方程》,没想到有些学校竟然还学《时滞微分方程》,于是找到一本由内藤敏机(日本)等著,马万彪等译的《时滞微分方程——泛函数微分方程引论》(有需要的可以私聊,CSDN貌似上传不了书籍,说侵权emmm),看着头秃,不过受到不少启发,尤其是对Logistic方程的改进,真真是长见识了。没找到有人用欧拉法解一阶时滞微分方程的,于是一不做二不休便用MATLAB实现了一下下…

    2022年10月1日
  • 如何修改bt tracker服务器,bt tracker服务器

    如何修改bt tracker服务器,bt tracker服务器bttracker服务器内容精选换一换云审计服务支持删除已创建的追踪器。删除追踪器对已有的操作记录没有影响,当您重新开通云审计服务后,依旧可以查看已有的操作记录。DELETE/v1.0/{project_id}/tracker无无无请参见错误码。本文操作介绍使用Linux操作系统的HECS(云耀云服务器)安装宝塔面板。宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux…

    2022年6月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号