👨🎓作者简介:一位喜欢写作,计科专业大三菜鸟
🏡个人主页:starry陆离
🕒首发日期:2022年8月29日星期一
🍁每日推荐:牛客网-面试神器
描述
请你实现一个链表。
操作:
insert x y:将y加入链表,插入在第一个值为x的结点之前。若链表中不存在值为x的结点,则插入在链表末尾。保证x,y为int型整数。
delete x:删除链表中第一个值为x的结点。若不存在值为x的结点,则不删除。
输入描述:
第一行输入一个整数n (1 < n < 104 ),表示操作次数。
接下来的n行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。
输出描述:
输出一行,将链表中所有结点的值按顺序输出。若链表为空,输出"NULL"(不含引号)。
5
insert 0 1
insert 0 3
insert 1 2
insert 3 4
delete 4
2 1 3
这题是要我们自己实现一个链表。链表是一种物理结构上非连续、非顺序的存储结构。而链表中常用的就是增删改查。
将y值插入到x节点之前
y.next=xp.next
xp.next=y
删除节点x
xp.next=xp.next.next
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sca=new Scanner(System.in);
MyList list=new MyList();
int n=sca.nextInt();
sca.nextLine();
String[] s;
String op;
int x,y;
for(int i=0;i<n;++i){
s=sca.nextLine().split(" ");
op=s[0];
x=Integer.parseInt(s[1]);
if(op.equals("insert")){
y=Integer.parseInt(s[2]);
list.insert(x,y);
}else{
list.delete(x);
}
}
System.out.println(list);
}
}
//定义节点
class Node{
int val;//值
Node next;//指向下一个节点
public Node(int val){
this.val=val;
}
}
//自定义链表
class MyList{
Node root;//头节点
public MyList(){
root =new Node(-1);
}
//查找值为x的节点的前一个节点
public Node findPre(int x){
Node cur=root;
while(cur.next!=null&&cur.next.val!=x){
cur=cur.next;
}
return cur;
}
//将y值插入到x节点之前
public void insert(int x,int y){
Node xPre=findPre(x);//查找值为x的节点的前一个节点
Node yNode=new Node(y);//创建y节点
yNode.next=xPre.next;//节点y的下一个节点是x节点指向的下一个节点
xPre.next=yNode;//更新x节点的下一个节点是y节点
}
//删除节点x
public void delete(int x){
Node xPre=findPre(x);//查找值为x的节点的前一个节点
if(xPre.next!=null){
xPre.next=xPre.next.next;
}
}
//输出链表中的值
public String toString(){
StringBuffer sb=new StringBuffer();
if(root.next==null){
return "NULL";
}else{
Node cur=root.next;
while(cur!=null){
sb.append(cur.val+" ");
cur=cur.next;
}
}
return sb.toString();
}
}
📚订阅专栏:『牛客刷题集锦』
如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦