【PTA筆問題】単連リスト

画像の説明を追加してください
個人名刺:

ブロガーアルコール依存症ᝰ。
個人プロフィール:ワインに酔いしれ、お酒で未来を切り拓く。
PTAの演習と分析
導入:ブロガーの練習問題の話題をPTAに収録

画像の説明を追加してください

1、片方向リストの基本操作

1.トピックス

単方向リストのノードの挿入と削除などの基本的なアルゴリズムを実装するプログラムを作成してください。単一連結リストと、ノードを挿入および削除するための一連の操作が与えられた場合、上記の操作が実行された後に連結リストを出力します。単方向リスト データ フィールドの値は整数です。

入力形式:
最初の行は正の整数 n で、現在の単一リンク リストの長さを入力します。2 行目は n 個のスペースで区切られた整数で、リンク リストの n 個の要素のデータ フィールド値です。3 行目は正の整数 m で、リンク リストに適用される操作の数を表します。次の m 行は、各行が操作を表し、0 kd または 1 k の形式の 2 つまたは 3 つの整数です。0 kd は、連結リストの k 番目のノードの後に​​、データ フィールドの値が d であるノードを挿入することを意味し、k=0 の場合は、ヘッダーが挿入されることを意味します。1 k は、リンクされたリストの k 番目のノードを削除することを意味し、この時点で k を 0 にすることはできません。注: 操作シーケンスに不正な操作 (長さ 5 のリンク リストで 8 番目のノードの削除、0 番目のノードの削除など) が含まれている場合、その操作は無視されます。n と m は 100000 を超えません。

出力形式:
出力は整数の行です。これは、上記の m 操作を実装した後の連結リストを表し、各整数の後にスペースがあります。入力データにより、結果リストが空でないことが保証されます。

入力サンプル:

5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6

出力例:

7 1 2 8 3 5

コード長制限 16 KB
時間制限 5000 ms
メモリ制限 256 MB

2.コード

import java.util.LinkedList;
import java.util.Scanner;


public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        LinkedList<Integer> list = new LinkedList<>();
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
    
    
            list.add(sc.nextInt());
        }
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
    
    
            int num = sc.nextInt();
            if (num == 0){
    
    
                int k = sc.nextInt();
                int d = sc.nextInt();
                if (k <= list.size()){
    
    
                    list.add(k, d);
                }
            }else if (num == 1){
    
    
                int k = sc.nextInt();
                if (k <= list.size() && k != 0){
    
    
                    list.remove(k-1);
                }
            }
        }
        for (Integer node : list) {
    
    
            System.out.print(node + " ");
        }
    }
}

2、単方向リストの基本的な応用 – 単方向リストの反転

1.トピックス

簡単な学生情報管理システムをプログラムするには、自己定義関数を使用して次の手順を実装します。
(1) 入力情報に従って片方向リストを作成し、すべてのノード情報を出力します。各生徒の情報には名前と学年が含まれます;
(2) 前の手順で作成した片方向リストを反転し、すべてのノード情報を出力します。

入力形式:
複数の入力生徒情報をもとに片方向リストを作成します。各行は学生情報を表し、入力として -1 の成績で終わります。
出力形式:
各学生情報は 1 行を占め、名前と成績はスペースで区切られ、成績は小数点第 1 位まで保持されます。
リンクされたリストを作成し、出力とプロンプト情報: 元の
反転と出力とプロンプト情報: 反転

サンプル入力:
これは一連の入力です。例えば:

王 87.3
王 60.1
王 89.5
李 93.2
府 87.5
王 78.6
程 89.1
唐 71.9
王 63.1
方 81.9
tt -1

出力例:
対応する出力をここに示します。例えば:

原作:
王87.3
王60.1
王89.5
李93.2
福87.5
王78.6
程89.1
唐71.9
王63.1
方81.9

逆:
方81.9
王63.1
唐71.9
程89.1
王78.6
福87.5
李93.2
王89.5
王60.1
王87.3

コード長制限 16 KB
時間制限 400 ms
メモリ制限 64 MB

2.コード

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        List<String> stu = new ArrayList<>();
        List<Double> sco = new ArrayList<>();
        int i = 0;
        double num = 0;
        while(num != -1){
    
    
            stu.add(sc.next());
            sco.add(sc.nextDouble());
            num = sco.get(i);
            i++;
        };
        System.out.println("Original:");
        for (int j = 0; j < stu.size() - 1; j++) {
    
    
            System.out.println(stu.get(j) + " " + sco.get(j));
            if (j == stu.size() - 2){
    
    
                System.out.println();
            }
        }
        System.out.println("Reversed:");
        for (int j = stu.size() - 2; j >= 0; j--) {
    
    
            System.out.println(stu.get(j) + " " + sco.get(j));
        }
    }
}

おすすめ

転載: blog.csdn.net/m0_65144570/article/details/127097662