题解 | #【模板】链表#
【模板】链表
https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f
import java.util.Scanner;
class LinkedNode{
/*
int的取值范围是-2147483648~2147483647,为防止头结点中数据和有效节点的值冲突,
所以初始值设为长整型的2147483648
*/
long value = 2147483648l;
LinkedNode next = null;
}
class LinkedList{
LinkedNode head = new LinkedNode();//链表头结点
//插入
void insert(int x, int y){
LinkedNode temp = head;
LinkedNode temp1 = null;//用来记录值为x的节点的前面一个节点
LinkedNode linkedNode = new LinkedNode();
linkedNode.value = y;
while(temp.next != null && temp.value != x){//当前节点不是最后一个节点,并且当前节点的值不是x,循环继续
if(temp.next.value == x){//记录值为x的节点的前一个节点
temp1 = temp;
}
temp = temp.next;
}
if(temp1 == null){
/*链表中不存在值为x的节点时,直接在表尾插入,
这里的判断条件为"temp1 == null",而不是"temp.next == null",是因为值为x的节点有可能在链表的最后一个*/
temp.next = linkedNode;
}else{
temp1.next = linkedNode;
linkedNode.next = temp;
}
}
//删除
void delete(int x){
LinkedNode temp = head;
LinkedNode temp1 = null;//用来记录值为x的节点的前面一个节点
while(temp.next != null && temp.value != x){
if(temp.next.value == x){//用来记录值为x的节点的前面一个节点
temp1 = temp;
}
temp = temp.next;
}
if(temp1 == null){//值为x的节点的前一个节点不存在,即链表中没有值为x的节点
return;
}else{
temp1.next = temp.next;
}
}
//输出链表元素
void printLinkedList(){
if(head.next == null){
System.out.println("NULL");
}else{
LinkedNode temp = head.next;
while(temp.next != null){
System.out.print(temp.value+" ");
temp = temp.next;
}
System.out.println(temp.value);
}
}
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
// 注意 hasNext 和 hasNextLine 的区别
for(int i=0; i<n; i++){
String test = in.nextLine();
String[] str = test.split(" ");
switch(str[0]){
case "insert":
int x = Integer.parseInt(str[1]);
int y = Integer.parseInt(str[2]);
linkedList.insert(x,y);
break;
case "delete":
int x1 = Integer.parseInt(str[1]);
linkedList.delete(x1);
break;
}
if(i == n-1){
linkedList.printLinkedList();
}
}
}
}
