题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 单链表删结点
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s=br.readLine().split(" ");
int[] nums= new int[s.length-3];
int N=Integer.parseInt(s[0]);
int delete=Integer.parseInt(s[s.length-1]);
int head=Integer.parseInt(s[1]);
for (int i = 2; i < s.length-1; i++)
nums[i-2] = Integer.parseInt(s[i]);
SingleLinkedList linkedList= new SingleLinkedList(head);
for (int i = 0; i < nums.length; i+=2) {
linkedList.insert(nums[i],nums[i+1]);
}
linkedList.delete(delete);
linkedList.display();
}
}
class SingleLinkedList{
public Node head;
public int length;
public SingleLinkedList(int val) {
Node node=new Node(val);
this.head = node;
this.length = 1;
}
private class Node{
private int val;
private Node next;
public Node(int val) {
this.val = val;
}
}
public void insert(int n1,int n2){
Node node= new Node(n1);
Node temp=head;
for (int i = 0; i < length; i++) {
if(temp.val==n2) {
Node nextNode=temp.next;
temp.next=node;
node.next=nextNode;
length++;
}
temp=temp.next;
}
}
public int delete(int target){
Node temp=head;
Node pre=null;
for (int i = 0; i < length-1; i++) {
if(temp.val==target){
if(i==0){
head=temp.next;
pre=temp;
}else {
pre.next=temp.next;
}
}
pre=temp;
temp=temp.next;
}
length--;
return 0;
}
public void display(){
Node temp=head;
StringBuilder sb= new StringBuilder();
for (int i = 0; i < length; i++) {
sb.append(temp.val+" ");
temp=temp.next;
}
System.out.println(sb.toString());
}
}
查看10道真题和解析