• PAT A1074 Reversing Linked List (25分)




    题意:

    给N个链表结点,以及K,对每K个长度的链表做逆置,输出逆置后的链表。

    题解:

    不是很熟悉vector.reverse(),所以每次翻转单独处理,但是要注意最后一个结点指的地址可能会在下轮翻转中变化,所以需要进行记录。
    注意%05d的输出格式会使得-1的输出出现问题,因此要分开考虑
    还有一种思路是利用map做地址与存储的映射,由于10^5的int map基本上不会超时

    #include <cstdio>
    using namespace std;
    const int N = 100010;
    struct Node{
        int v;
        int next;
    }node[N];
    
    int main(){
        int start,n,k;
        scanf("%d %d %d",&start,&n,&k);
        int add;
        for(int i = 0;i<n;i++){
            scanf("%d" ,&add);
            scanf("%d %d",&node[add].v,&node[add].next);
        }
        int temp = start;
        int address[k];//存放即将反转的链表的地址
        bool flag = true;
        int time = 0;
        int lastend;
        while(temp!=-1){
            if(time!=0) lastend = address[0];
            for(int i = 0;i<k;i++){
                address[i] = temp;
                if(temp == -1){
                    flag = false;
                    break;
                }
                temp = node[temp].next;            
            }
            if(flag==true){//未到底开始反转
                for(int i = 0;i  < k ; i++){
                    if(i==0){ 
                        node[address[0]].next = temp;                  
                    }else{
                        node[address[i]].next  = address[i-1];
                    }
                }
                time++;
            }else{
                break;
            }
            
            //更新start
            if(time==1){//第一次反转
                start = address[k-1];
            }else{
                node[lastend].next = address[k - 1];
            }
        }
        while(start!=-1){
            if(node[start].next!=-1) printf("%05d %d %05d
    ",start,node[start].v,node[start].next);
            else printf("%05d %d %d
    ",start,node[start].v,node[start].next);
            start = node[start].next;
        }
        
    }
    
  • 相关阅读:
    Matlab P文件——加快Matlab程序,保护你的算法
    电烙铁的使用
    CV、PR方向的资源
    遗传算法初接触
    Linux进程控制
    C语言编程优化运行速度
    用MATLAB优化工具箱解线性规划
    50、linux shell命令,netstat,traceroute
    51、linux shell命令,route,ifconfig
    56、vi常见用法,多窗口模式,标记,多文件编辑,快捷操作及设置
  • 原文地址:https://www.cnblogs.com/shuibeng/p/13595528.html
Copyright © 2020-2023  润新知