• 先构建(构建就是不断的找前驱,并且添加新的节点)
  • 再删除(在头节点前面添加了一个dummy节点,主要是统一删除头节点时的操作)
import java.util.*;

class ListNode{
    
    int val;
    ListNode next;
    ListNode(int val, ListNode next){
        this.val = val;
        this.next = next;
    }
    
    ListNode(int val){
        this.val = val;
    }
}

public class Main{
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        // 构建链表
        ListNode head = new ListNode(scanner.nextInt());
        for(int i=1;i<n;i++){
            int addVal = scanner.nextInt(); //表示插入节点
            int preVal = scanner.nextInt(); //表示插入节点的前驱节点
            ListNode p = head;
            // 在链表中寻找前驱节点
            while(p!=null){
                if(p.val==preVal){
                    break;
                }
                p = p.next;
            }
            // 寻找到之后将addVal插入到前驱节点之后
            ListNode addNode = new ListNode(addVal,p.next);
            p.next = addNode;
        }
        int delVal = scanner.nextInt();
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode p = head, pre = dummy;
        while(p!=null){
            if(p.val == delVal){
                pre.next = p.next;
                p=p.next;
            }else{
                p=p.next;
                pre = pre.next;
            }
        }
        head = dummy.next;
        p = head;
        StringBuilder ans = new StringBuilder();
        while(p!=null){
            ans.append(p.val).append(" ");
            p = p.next;
        }
        ans.deleteCharAt(ans.length()-1);
        System.out.println(ans.toString());
    }
    
}