题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
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.hasNext()) { // 注意 while 处理多个 case //输入的第一个值:节点个数 int n = in.nextInt(); //输入的第二个值:头节点的值,其实是首元节点 int headVal = in.nextInt(); ListNode listNode=new ListNode(headVal); //辅助指针 ListNode temp=listNode; //输入的第3~倒数第2个数,共n-1(以偶数个数出现)个:各节点(除了头节点)的值 for(int i=0;i<n-1;i++){ //每次重置头指针 ListNode head=listNode; int back=in.nextInt(); int front=in.nextInt(); //将back插在front的后面 while(head!=null){ if(head.val==front){ ListNode node=new ListNode(back); //插入front的后面 node.next=head.next; head.next=node; break; }else{ head=head.next; } } } ListNode mark=new ListNode(0); ListNode start=mark; //真正的头节点 mark.next=temp; //输入的最后一个值:要删除的节点值 int del=in.nextInt(); //删除逻辑:双指针 while(temp!=null){ if(temp.val==del){ temp=temp.next; mark.next=temp; }else{ temp=temp.next; mark=mark.next; } } start=start.next; while(start!=null){ System.out.print(start.val+" "); start=start.next; } } } } class ListNode{ int val; ListNode next; public ListNode(int val){ this.val=val; this.next=null; } }
稍稍有点麻烦,别让指针绕晕了就行