题解 | #从单向链表中删除指定值的节点#最最最贴近题干含义
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); String[] split = s.split(" "); int num = Integer.parseInt(split[0]);//链表结点个数 ListNode nodeHead = new ListNode(Integer.parseInt(split[1])); ListNode temp; for (int i = 2; i < split.length - 1; i++) { //从字符串下标为2开始,每隔两个都是我们要新建结点的val值 ListNode node = new ListNode(Integer.parseInt(split[i])); if (i == 2) { nodeHead.next = node; i++; } else { //比如2->3->1之间要在3后面插入4 temp = nodeHead; //找到与i+1位置处等val值的结点存储为临时的temp while (temp.val != Integer.parseInt(split[i + 1])) { temp = temp.next; } // if (temp.next != null) { node.next = temp.next; temp.next = node; } else { //如果在最后一个节点后面插入就不用先让node指向前面节点的next temp.next = node; } i++; } } //至此,完成了链表的最终形态,下一步就是删除节点,由于有结点总个数,从前往后遍历即可 int removeVal = Integer.parseInt(split[split.length - 1]);//要删除的结点val值 //首结点就是要删除掉的那么首结点变成下一个结点 if (nodeHead.val == removeVal) { nodeHead = nodeHead.next; } else { temp = nodeHead; for (int i = 1; i < num; i++) {//num是已知的结点总个数 if (temp.next.val == removeVal) { temp.next = temp.next.next; } else { temp = temp.next; } } } temp = nodeHead; while (temp.next != null) { System.out.print(temp.val + " "); temp = temp.next; } System.out.print(temp.val); scanner.close(); } } class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } public ListNode(int val, ListNode next) { this.val = val; this.next = next; } }