题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 // while (in.hasNextInt()) { // 注意 while 处理多个 case // int a = in.nextInt(); // int b = in.nextInt(); // System.out.println(a + b); // } int n = in.nextInt(); int[] arr = new int[2 * n]; int index = 0; while (index < 2 * n) { arr[index] = in.nextInt(); index++; } Node head = new Node(arr[0]); for (int i = 1; i < 2 * n - 1; i++) { if (arr[i] == head.v) { // Node second = find(head, arr[i - 1]); Node second = new Node(arr[i - 1]); second.next = head.next; head.next = second; } else if (i % 2 == 0) { Node pre = find(head, arr[i]); Node next = find(head, arr[i - 1]); if (pre == null && next == null) { pre = new Node(arr[i]); next = new Node(arr[i - 1]); pre.next = next; } else if (pre == null && next != null) { Node oldPre = findPre(head, next.v); pre = new Node(arr[i]); oldPre.next = pre; pre.next = next; } else if (pre != null && next == null) { next = new Node(arr[i - 1]); next.next = pre.next; pre.next = next; } else if (pre != null && next != null) { Node oldPre = findPre(head, next.v); oldPre.next = next.next; next.next = pre.next; } } } Node node = head; while (node != null) { if (arr[2 * n - 1] == node.v) { node = node.next; continue; } System.out.print(node.v + " "); node = node.next; } } private static Node find(Node head, int v) { Node node = head; while (node != null) { if (node.v == v) { return node; } else { node = node.next; } } return null; } private static Node findPre(Node head, int v) { Node node = head; while (node != null) { if (node.next.v == v) { return node; } else { node = node.next; } } return null; } } class Node { int v; Node next; Node (int v) { this.v = v; } }