【九度】题目1524:复杂链表的复制

108 篇文章 0 订阅
102 篇文章 5 订阅
题目地址: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
****************************************************************/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值