打印列表从尾部到头部

打印列表从尾部到头部

大家好,又见面了,我是全栈君,今天给大家准备了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;
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • comparable java_java rectangle

    comparable java_java rectangle在JAVA中使用eXtremeDBautoid,主要有以下几个问题:定义插入数据已经获取记录,如何获得autoid知道autoid,如何获取记录定义autoid在类的定义前加入注释:@Persistent(autoid=true)注意,eXtremeDB中的autoid并不需要单独的定义出一列表示,只需要在类级别定义即可。插入数据正常的使用insert方法插入即可,无需关注autoid。如果需要…

    2022年10月14日
  • 向量内积的推导_向量数量积的坐标公式推导

    向量内积的推导_向量数量积的坐标公式推导基本式几何對稱性:。線性函數:設。固定時,而且同樣道理,固定時,转载于:https://www.cnblogs.com/kyostone/p/5743252.html…

  • linux nohup命令输出日志_nohup运行sh文件

    linux nohup命令输出日志_nohup运行sh文件(一)前言因为经常使用Xshell进行服务器代码的运行,但是每次到关机后,或者是关掉Xshell连接窗口,在服务器上的命令,操作也就断掉了。这不得不找到了一个Linux命令:nohup(二)基本用法nohupcommand[arg…][&amp;]拿pythontest.py为例子一般我们运行命令是直接:pythontest.py,但是在xshel…

  • java.lang.verifyerror_java.lang.reflect.undeclared

    java.lang.verifyerror_java.lang.reflect.undeclared以前写代码,总免不了编写登陆部分。在获取user的时候,只可能返回一个user实例,或者为null。以前使用以下方法实现。publicUserget(Stringid){Sessionsession=HibernateUtil.getSessionFactory().openSession();Stringhql=”fromUseruwhereu.id=?”;Listlis…

  • ThreadPoolExcutor(线程池)

    ThreadPoolExcutor(线程池)1、概念:   用于管理java的多线程。线程的生命周期包括创建、就绪、运行、阻塞、销毁,当有大量的线程任务需要创建时,内存的开销就大了,此时,使用线程池,在一定程度上能够很好的缓解线程的大开销。2、优势:    (1)降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。   (2)提高响应速度。当任务到达时,任务可以不需要等到线程

    2022年10月28日
  • node.js win7环境搭建与基本测试

    node.js win7环境搭建与基本测试

发表回复

您的电子邮箱地址不会被公开。

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