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")