打印列表从尾部到头部

打印列表从尾部到头部

大家好,又见面了,我是全栈君,今天给大家准备了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)
上一篇 2022年1月16日 下午8:00
下一篇 2022年1月16日 下午9:00


相关推荐

  • css鼠标禁用[通俗易懂]

    css鼠标禁用[通俗易懂]#1.鼠标的悬浮样式:cursordiv:hover{cursor:not-allowed;/*光标是一个红色的圈加一个斜杠)*/}1、default默认光标(通常是一个箭头)2、auto默认。浏览器设置的光标。3、crosshair光标呈现为十字线。4、pointer光标呈现为指示链接的指针(-只手)5、move此光标指示某对象可被移动。6、e-resize此光标指示矩形框的边缘可被向右(东)移动。7、ne-resize此光标指示矩形

    2022年5月10日
    47
  • 专业名词(版本号)「建议收藏」

    专业名词(版本号)「建议收藏」专业名词(版本号)

    2022年4月24日
    54
  • 五子棋人机对战思路「建议收藏」

    五子棋人机对战思路「建议收藏」五子棋人机对战:人机对战,我们可以想象一下我们在玩QQ游戏五子棋时的场景,根据每次下的步骤来分析电脑是怎样解析我们下棋的步骤的。下五子棋的步骤:1、第一步,黑子先下2、白子的第一步的最好的位置就是在黑子周围的八个点上3、接着黑子的第二步必然也是根据白子周围的八个点和自己的黑子所在的位置来下。4、如此循环下去。。。。那么对于计算机来说,就是让他找到第一个黑子周围的八个点,并且随机选中一个下白子。…

    2022年6月16日
    188
  • thinkphp一键清除缓存的方法

    thinkphp一键清除缓存的方法

    2021年11月3日
    56
  • 如何写详细设计文档

    如何写详细设计文档nbsp 在大多数软件项目中 要末不作详细设计 要么开发完成后再补详细设计文档 质量也不容乐观 文档与系统往往不能同步 使详细设计文档完全流于形式 对工作没有起到实际的帮助 那到底应不应该写详细设计文档呢 怎么使详细设计文档起到他应有的作用呢 下面就让我们来认识一下详细设计及写详细设计文档的好处和问题 什么是详细设计 nbsp 详细设计是相对概要设计而言的 是瀑布开发流程的一个重要环节 在概要设计的高层设计的基

    2026年3月17日
    2
  • 腾讯宣布其自研大模型“混元”将发力全模态领域

    腾讯宣布其自研大模型“混元”将发力全模态领域

    2026年3月13日
    2

发表回复

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

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