• PAT 反转链表


    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。

    输入格式:

    每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N(<=105) 、以及正整数 K (<=N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 -1 表示。

    接下来有 N 行,每行格式为:

    Address Data Next

    其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

    输出格式:

    对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

    输入样例:

    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218

    输出样例:

    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1
    a,b,k=map(int,input().split())
    c=[None for i in range(100001)]
    for i in range(b):
        node=list(map(int,input().strip().split()))
        c[node[0]]=[node[1],node[2]]
    d=[]
    #找到所有有效结点加入list
    while a!=-1:
       d.append([a,c[a][0]])
       a=c[a][1]
    t=len(d)//k    #反转次数
    for i in range(t):
        s=d[i*k:k+i*k]
        s.reverse()
        d[i*k:i*k+k]=s
    for i in range(len(d)):
        if i == len(d)-1:
            print('%05d'%d[i][0],d[i][1],-1)
        else:
            print('%05d'%d[i][0],d[i][1],'%05d'%d[i+1][0])

    这道题最大的坑就是给出的结点不一定都是有效结点

  • 相关阅读:
    AUDIT审计的一些使用
    HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN. (Doc ID 342972.1)
    使用BBED理解和修改Oracle数据块
    Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [ID 1340831.1]
    调试利器GDB概念
    第4章 思科IOS
    第3章 ip地址和子网划分
    第2章 TCPIP
    2020年阅读过的黑客资源推荐篇
    第1章 计算机网络
  • 原文地址:https://www.cnblogs.com/andrew3/p/12670466.html
Copyright © 2020-2023  润新知