-
题目地址:http://ac.jobdu.com/problem.php?pid=1524
-
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
题目描述:
-
输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n (1<=n<=1000):n代表将要输入的链表元素的个数。(节点编号从1开始)。
接下来有n个数,表示链表节点中的值。
接下来有n个数Ti,Ti表示第i个节点的另一个指针指向。
Ti = 0 表示这个指针为NULL。
-
输出:
-
对应每个测试案例,
输出n行,每行有二个数,第一个代表当前节点值,第二个代表当前节点的特殊指针的值。
-
样例输入:
-
5 1 2 3 4 5 3 5 0 2 0
-
样例输出:
-
1 3 2 5 3 0 4 2 5 0
==好吧,我又被题目忽悠了,其实是测试用例忽悠了。
给几组测试用例。各位不要被测试用例绕晕。
其实这个题如果不用链表的话,数组实现起来会很容易。
还是用链表实现吧。恩,希望可以带来一些思路和指导。
/*
===第1组===
5
1 2 3 4 5
3 5 0 2 0
===答案===
1 3
2 5
3 0
4 2
5 0
===第2组===
5
1 2 3 4 5
0 1 2 3 4
===答案===
1 0
2 1
3 2
4 3
5 4
===第3组===
5
1 2 3 4 5
0 4 3 1 2
===答案===
1 0
2 4
3 3
4 1
5 2
===第4组===
5
6 7 8 9 10
0 1 2 3 4
===答案===
6 0
7 6
8 7
9 8
10 9
===第5组===
5
6 7 8 9 10
0 5 4 2 1
===答案===
6 0
7 10
8 9
9 7
10 6
*/
C++ AC
#include <stdio.h>
#include <malloc.h>
const int maxn = 1002;
int array[maxn];
struct LinkedNode{
int data;
struct LinkedNode *next;
struct LinkedNode *special;
};
int n,i;
int main(){
LinkedNode *node,*tail,*p,*q;
while(scanf("%d",&n) != EOF){
array[0] = 0;
node = (LinkedNode*)malloc(sizeof(LinkedNode));
node->next = NULL;
tail = node;
for(i = 0; i < n; i++){
int data;
scanf("%d",&data);
array[i+1] = data;
p = (LinkedNode*)malloc(sizeof(LinkedNode));
p->data = data;
tail->next = p;
tail = p;
}
tail-> next = NULL;
p = node->next;
for(i = 0; i < n; i++){
int data;
scanf("%d",&data);
q = (LinkedNode*)malloc(sizeof(LinkedNode));
q->data = array[data];
p->special = q;
p = p->next;
}
node = node->next;
for(i = 0; i < n; i++){
printf("%d %d\n",node->data,node->special->data);
node = node->next;
}
}
return 0;
}
/**************************************************************
Problem: 1524
User: wangzhenqing
Language: C++
Result: Accepted
Time:40 ms
Memory:1288 kb
****************************************************************/
Java AC
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
/*
* 1524
*/
public static void main(String[] args) throws Exception {
StreamTokenizer st = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
while (st.nextToken() != StreamTokenizer.TT_EOF) {
int n = (int) st.nval;
int array[] = new int[n+1];
LinkedNode node = null;
LinkedNode point = null;
for (int i = 0; i < n; i++) {
st.nextToken();
array[i+1] = (int)st.nval;
LinkedNode tempNode = new LinkedNode(array[i+1] , null , null);
if (point == null) {
node = tempNode;
point = node;
}else {
point.next = tempNode;
point = point.next;
}
}
point = node;
for (int i = 0; i < n; i++) {
st.nextToken();
point.special = new LinkedNode(array[(int)st.nval] , null , null);
point = point.next;
}
for (int i = 0; i < n; i++) {
System.out.println(node.data+" "+node.special.data);
node = node.next;
}
}
}
static class LinkedNode{
private int data;
private LinkedNode next;
private LinkedNode special;
public LinkedNode(int data, LinkedNode next, LinkedNode special) {
super();
this.data = data;
this.next = next;
this.special = special;
}
public LinkedNode() {
super();
}
}
}
/**************************************************************
Problem: 1524
User: wangzhenqing
Language: Java
Result: Accepted
Time:860 ms
Memory:27564 kb
****************************************************************/