描述
请你实现一个链表。
操作:
insert x y:将�y加入链表,插入在第一个值为�x的结点之前。若链表中不存在值为�x的结点,则插入在链表末尾。保证�x,�y为int型整数。
delete x:删除链表中第一个值为�x的结点。若不存在值为�x的结点,则不删除。
输入描述:
第一行输入一个整数�n (1≤�≤1041≤n≤104),表示操作次数。
接下来的�n行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。
输出描述:
输出一行,将链表中所有结点的值按顺序输出。若链表为空,输出"NULL"(不含引号)。
示例1
输入:
5 insert 0 1 insert 0 3 insert 1 2 insert 3 4 delete 4
复制输出:
2 1 3
import java.util.*;
class Node{
int val;
Node next;
Node(int val) {
this.val=val;
}
}
class MyList{
Node root;
MyList(){
root=new Node(-1);
}
public Node findPre(int x){
Node cur=root;
while(cur.next!=null&&cur.next.val!=x) cur=cur.next;
return cur;
}
public void insert(int x,int y){
Node xPre=findPre(x);
Node yNode=new Node(y);
yNode.next=xPre.next;
xPre.next=yNode;
}
public void delete(int x){
Node xPre=findPre(x);
if(xPre.next!=null)
xPre.next=xPre.next.next;
}
public String toString(){
StringBuilder sb=new StringBuilder();
if(root.next==null) return "NULL";
else{
Node cur=root.next;
while(cur!=null){
sb.append(cur.val+" ");
cur=cur.next;
}
}
return sb.toString();
}
}
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int n= scanner.nextInt();
MyList list=new MyList();
while(n-->=0){
String[] arr=scanner.nextLine().split(" ");
if(arr[0].equals("insert")){
list.insert(Integer.parseInt(arr[1]),Integer.parseInt(arr[2]));
}else if(arr[0].equals("delete")) list.delete(Integer.parseInt(arr[1]));
}
System.out.println(list);
}
}