1 条题解
-
0
题解
删除链表结点时,最麻烦的是“要删除首结点”。
可以使用一个哨兵结点
dummy放在真正 head 前面:dummy -> head -> ...这样无论删除的是不是原来的首结点,都可以统一处理:
- 如果
p->next->data == x,删除p->next; - 否则
p=p->next。
注意删除后不要立刻移动 p,因为新的
p->next仍可能等于 x。#include <bits/stdc++.h> using namespace std; struct Node { long long data; Node* next; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; Node dummy{0,nullptr}; Node* tail=&dummy; for (int i=0;i<n;++i) { long long v; cin >> v; tail->next=new Node{v,nullptr}; tail=tail->next; } long long x; cin >> x; Node* p=&dummy; while (p->next) { if (p->next->data==x) { Node* t=p->next; p->next=t->next; delete t; } else { p=p->next; } } if (!dummy.next) { cout << "Empty\n"; } else { bool first=true; for (Node* cur=dummy.next;cur;cur=cur->next) { if (!first) cout << ' '; first=false; cout << cur->data; } cout << '\n'; } while (dummy.next) { Node* t=dummy.next; dummy.next=t->next; delete t; } return 0; } - 如果
- 1
信息
- ID
- 5148
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
粤公网安备44195502000252号