题目描述
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
详细描述:
本题为考察链表的插入和删除知识。
链表的值不能重复
构造过程,例如
1 -> 2
3 -> 2
5 -> 1
4 -> 5
7 -> 2
最后的链表的顺序为 2 7 3 1 5 4
删除 结点 2
则结果为 7 3 1 5 4
输入描述:
1 输入链表结点个数 2 输入头结点的值 3 按照格式插入各个结点 4 输入要删除的结点的值
输出描述:
输出删除结点后的序列
示例1
输入
5 2 3 2 4 3 5 2 1 4 3
输出
2 1 5 4
import java.util.ArrayList;
import java.util.Scanner;
public class Main{public static void main(String [] args){
Scanner sc =new Scanner(System.in);
while (sc.hasNextInt()){
//这两行代码要写在这个while循环里面
int number = sc.nextInt();
int head = sc.nextInt();
ArrayList<Integer> list = new ArrayList<>();
list.add(head);
for (int i=1;i<number;i++)
{
int insertNode = sc.nextInt();
int preNode = sc.nextInt();
int index = list.indexOf(preNode);
//在preNode这个点后面一个位置插入,index_insert=index+1
list.add(index+1,insertNode);
}
Object delectNode = sc.nextInt();
list.remove(delectNode);
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
//这里有个超坑的设置,输出完毕后记得换行,不然检测不通过!!!!马的,找了好久的bug!
System.out.println();
}
sc.close();
}
}