题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
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()); } }