本文主要是介绍《剑指Offer》面试题-从头到尾打印链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
- 输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
- 输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
- 样例输入:
-
1 2 3 4 5 -1
- 样例输出:
-
5 4 3 2 1
代码(一)双链表输出:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
typedef struct node{
int data;
link pre;
link next;
}Node;
void print(link p){
while(p->pre){
printf("%d\n", p->data);
p = p->pre;
}
}
int main(int argc, char const *argv[])
{
int data;
link L = malloc(sizeof(Node));
L->pre = L->next = 0;
L->data = -1;
link p = L;
for(; ;){
scanf("%d", &data);
if(data == -1) break;
link y = malloc(sizeof(Node));
y->data = data;
y->next = p->next;
p->next = y;
y->pre = p;
p = y;
}
print(p);
return 0;
}
代码(二)单链表递归输出:
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
typedef struct node{
int data;
link next;
}Node;
void print(link p){
if(!p) return;
if(p){
print(p->next);
}
printf("%d\n", p->data);
}
int main(int argc, char const *argv[])
{
int data;
link L = malloc(sizeof(Node));
L->next = 0;
link p = L;
for(; ;){
scanf("%d", &data);
if(data == -1) break;
link y = malloc(sizeof(Node));
y->data = data;
y->next = p->next;
p->next = y;
p = y;
}
print(L->next);
return 0;
}
这篇关于《剑指Offer》面试题-从头到尾打印链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!