大家好,又见面了,我是全栈君
题目描写叙述:
输入一个链表,从尾到头打印链表每一个节点的值。
输入:
每一个输入文件仅包括一组測试例子。
每一组測试案例包括多行,每行一个大于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.cn/116718.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有