题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
import java.util.*; import java.io.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { String[] str = br.readLine().split(" "); int count = Integer.valueOf(str[0]); Map<Integer, Node> map = new HashMap(); Node head = new Node(Integer.valueOf(str[1]), null); map.put(Integer.valueOf(str[1]), head); Node tail = head; Node temp; for (int i = 2; i < str.length - 1; i += 2) { int cur = Integer.valueOf(str[i]); int pre = Integer.valueOf(str[i + 1]); map.putIfAbsent(cur, new Node(cur, null)); map.putIfAbsent(pre, new Node(pre, null)); Node node = map.get(pre); temp = node.next; Node c = map.get(cur); node.next = c; c.next = temp; //tail=c; } Node nodeDel = map.get(Integer.valueOf(str[str.length - 1])); Node preDel = head; while (preDel.next != nodeDel && head != nodeDel) { preDel = preDel.next; } Node tempDel = nodeDel.next; if (head == nodeDel) { head = tempDel; } else { preDel.next = tempDel; nodeDel.next = null; } map.remove(Integer.valueOf(str[str.length - 1])); while (head != null) { System.out.print(head.val + " "); head = head.next; } } catch (IOException e) { e.printStackTrace(); } } public static class Node { int val; Node next; public Node(int val, Node next) { this.val = val; this.next = next; } } }