题解
链表删除结点
1 条题解
-
0
PP4861 链表删除结点(入门)
解题思路
第一步,理解题意。 有一串数字 1、2、3、4、5,按顺序连成一条链表。题目给一个数字 n(1<n≤5),要求把装着 n 的那个结点从链表中删掉,然后从链表头开始输出剩下的数字。例如 n=3 时,3 被删掉,剩下 1 2 4 5。
第二步,找简单的做法。 链表本来就固定是 1 到 5,所以不需要真的建链表。只要从 1 数到 5,跳过 n 不输出,其余数字照常输出即可。少输出一个数字,就相当于"把那个结点删掉了"。
第三步,注意细节。 n 只能是 2、3、4、5,所以一定在链表里,不需要担心"删不到"的情况;输出时数字之间用空格隔开,最后换行。末尾多一个空格也不影响判题。
第四步,例子验证。 输入 2,就跳过 2,输出 1 3 4 5;输入 5,就跳过 5,输出 1 2 3 4。如果输入 4,得到 1 2 3 5,删掉 4 后剩下的正是这些数。
参考代码
// 链表删除结点:从 1~5 的链表中删掉数字 n,再输出剩下的 #include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 1; i <= 5; ++i) { if (i != n) cout << i << " "; // 跳过要删除的数字 } cout << endl; return 0; }复杂度分析
只用了一层 for 循环,固定循环 5 次,每次做一次判断和一次输出,所以时间复杂度和空间复杂度都是 O(1)。链表长度固定,不会随着数据变大,运行速度极快。
- 1