Java机试题*:从单向链表中删除指定值的节点(链表定义)


描述

输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

链表的值不能重复。

构造过程,例如输入一行数据为: 6 2 1 2 3 2 5 1 4 5 7 2 2 则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示: 1 2 表示为 2->1 链表为2->1 3 2表示为 2->3 链表为2->3->1 最后的链表的顺序为 2 7 3 1 5 4

输入描述:

输入一行,有以下4个部分:

1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值

输出描述:

输出一行

输出删除结点后的序列,每个数后都要加空格

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

public class Main {
    /**
     * 思路:(使用LinkedList)构建链表数据,挂载节点,删除指定节点,输出最终的。
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()){
            // 个数
            int num = sc.nextInt();
            int frist = sc.nextInt();
            LinkedList link = new LinkedList();
            link.addFirst(frist);
            for (int i = 0; i < num - 1; i++) {
                int nodeVal = sc.nextInt();
                int before = sc.nextInt();
                link.add(link.indexOf(before) + 1, nodeVal);
            }
            int del = sc.nextInt();
            link.remove(link.indexOf(del));
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < link.size(); i++) {
                sb.append(link.get(i)+ " ");
                
            }
            System.out.print(sb.toString().substring(0,sb.length() - 1));
        }
    }
}

链表是一种数据结构,在内存中通过节点记录内存地址而相互链接形成一条链的储存方式。

相比数组,链表在内存中不需要连续的区域,每一个节点都能够记录下一个节点的内存地址,通过引用进行查找,这样的特点使得链表增删操作时间消耗很小,而查找遍历时间消耗很大的特点。

我们在Java中使用的LinkedList(可以实现堆栈、队列、链表相关操作)即为双向链表。而在链表是由其基本组成单元节点(Node)来实现的。

参考链接:https://blog.csdn.net/weixin_41582192/article/details/81181077