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(); LinkedListlink = 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