【PTA刷题】单链表

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
专栏PTA习题及解析
介绍记录了博主在pta学习练题的题目

请添加图片描述

一、单链表基本操作

1. 题目

请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第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 + " ");
        }
    }
}

二、单链表基础应用–单链表逆置

1. 题目

编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现:
(1) 根据输入信息创建单链表并输出所有结点信息。每个学生的信息包括姓名和成绩;
(2) 将上一步创建的单链表逆置后并输出所有结点信息。

输入格式:
根据输入的若干个学生信息创建单链表。每一行代表一个学生信息,以成绩-1作为输入的结束。
输出格式:
每个学生信息占一行,姓名和成绩之间以空格分隔,成绩保留一位小数。
创建链表输出加提示信息:Original
逆置后输出加提示信息:Reversed

输入样例:
在这里给出一组输入。例如:

Wang 87.3
Wang 60.1
Wang 89.5
Li 93.2
Fu 87.5
Wang 78.6
Cheng 89.1
Tang 71.9
Wang 63.1
Fang 81.9
tt -1

输出样例:
在这里给出相应的输出。例如:

Original:
Wang 87.3
Wang 60.1
Wang 89.5
Li 93.2
Fu 87.5
Wang 78.6
Cheng 89.1
Tang 71.9
Wang 63.1
Fang 81.9

Reversed:
Fang 81.9
Wang 63.1
Tang 71.9
Cheng 89.1
Wang 78.6
Fu 87.5
Li 93.2
Wang 89.5
Wang 60.1
Wang 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