3个地方出了错:

1.没把题读明白,没注意数组元素数量是2*(N-1)而不是2*N;

2.while(p != nullptr && p->val != nums[i]) p = p->next; num[i]写成num[i-1]半天没发现,无限循环;

3.删除元素时候有意识地加了虚拟头节点,为了防止头节点要被删除的情况,但遍历还是从头节点开始的,就...很难评

#include <iostream>
#include <vector>
using namespace std;

struct node{
    int val;
    node* next;
    node(int x): val(x), next(nullptr) {}
};

void listFuc(int N, int h, vector<int> nums, int del){
    node* head = new node(h);  
    for(int i = 1; i < N; i += 2){
        node* p = head;
        while(p != nullptr && p->val != nums[i]) p = p->next;

        node* new_node = new node(nums[i-1]);
        new_node->next = p->next;
        p->next = new_node;
    }

    node* dummy = new node(0);
    dummy->next = head;
    node* p = dummy;

    while(p->next){
        while(p->next->val == del){
            // node* temp = p->next;
            // cout << temp->val << ' ';
            p->next = p->next->next;
            // delete temp;
        } 
        p = p->next;
    }

    p = dummy;
    while (p->next) {
        cout << p->next->val << ' ';
        p = p->next;
    }

}

int main() {
    int N;
    cin >> N;
    int h;
    cin >> h;
    vector<int> nums;
    int x;
    for(int i = 0; i < 2*(N-1); i++){
        cin >> x;
        nums.push_back(x);
    }
    int del;
    cin >> del;
    cin.ignore();

    listFuc(2*(N-1), h, nums, del);

    return 0;
}
// 64 位输出请用 printf("%lld")