zoukankan      html  css  js  c++  java
  • 剑指OFFER之复杂链表的复制(九度OJ1524)

    题目描述:

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

     

    输入:

    输入可能包含多个测试样例,输入以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 

    解题思路:

      额,我又投机取巧了...

      按照原题的意思,应该是给定了这个复杂的链表,然后每个节点先复制一个节点,在把随机的指针复制,移动随机的指针,最后跳跃连接链表,即可。

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct list{
        int num;
        int random_link;
    }List;
    typedef struct listarr{
        List arr[1000];
    }ListArr;
    int main(){
        int n,i;
        while(scanf("%d",&n)!=EOF && n>=1 && n<=1000){
            ListArr *a = (ListArr *)malloc(sizeof(ListArr));
            a->arr[0].num=0;
            a->arr[0].random_link=0;
            for(i=1;i<=n;i++)
                scanf("%d",&a->arr[i].num);
            for(i=1;i<=n;i++)
                scanf("%d",&a->arr[i].random_link);
     
            for(i=1;i<=n;i++)
                printf("%d %d
    ", a->arr[i].num,a->arr[(a->arr[i].random_link)].num);
        }
        return 0;
    }
    /**************************************************************
        Problem: 1524
        User: xhalo
        Language: C
        Result: Accepted
        Time:40 ms
        Memory:912 kb
    ****************************************************************/
  • 相关阅读:
    如何掌握所有的程序语言
    Excel技巧:如何绘制一份优秀的甘特图(项目管理)
    Excel技巧:如何绘制一份优秀的甘特图(项目管理)
    程序员的鄙视链
    程序员的鄙视链
    程序员的鄙视链
    程序员之间的鄙视链
    炮(棋盘DP)
    最长公共子上升序列
    black hack
  • 原文地址:https://www.cnblogs.com/xing901022/p/3779918.html
Copyright © 2011-2022 走看看