【PTA 브러시 질문】단일 연결 리스트

이미지 설명을 추가하세요
개인 명함:

블로거: 알코올 중독자 ᝰ.
개인 프로필: 와인에 탐닉하고, 음료와 함께 미래를 위해 노력하십시오.
: PTA 연습 및 분석
소개하다: 블로거의 연습문제 주제를 pta로 녹음

이미지 설명을 추가하세요

하나,단일 연결 리스트의 기본 연산

1. 주제

단일 연결 리스트에서 노드 삽입 및 삭제와 같은 기본 알고리즘을 구현하는 프로그램을 작성하십시오. 단일 연결 리스트와 노드를 삽입하고 삭제하는 일련의 작업이 주어지면 위의 작업을 수행한 후 연결 목록을 출력합니다. 단일 연결 목록 데이터 필드의 값은 정수입니다.

입력 형식:
입력 첫 번째 줄은 현재 단일 연결 목록의 길이를 나타내는 양의 정수 n이고, 두 번째 줄은 연결 목록의 n 요소에 대한 데이터 필드 값인 n 공백으로 구분된 정수입니다. 세 번째 줄은 연결 리스트에 적용되는 연산의 수를 나타내는 양의 정수 m이고, 다음 m 줄의 각 줄은 연산을 나타내며 0kd 또는 1k 형식의 정수 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

코드 길이 제한 16KB
시간 제한 5000ms
메모리 제한 256MB

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 + " ");
        }
    }
}

둘,단일 연결 목록의 기본 응용 – 단일 연결 목록의 역전

1. 주제

간단한 학생 정보 관리 시스템을 프로그래밍하려면 자체 정의 함수를 사용하여 다음 단계를 구현합니다.
(1) 입력 정보에 따라 단일 연결 목록을 만들고 모든 노드 정보를 출력합니다. 각 학생의 정보에는 이름과 학년이 포함되며,
(2) 이전 단계에서 생성된 단일 연결 리스트를 반전하여 모든 노드 정보를 출력합니다.

입력 형식:
여러 입력 학생 정보를 기반으로 단일 연결 목록을 만듭니다. 각 행은 입력으로 -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

코드 길이 제한 16KB
시간 제한 400ms
메모리 제한 64MB

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
рекомендация