题目描述
请编写程序,将 nnn 个整数顺次插入一个初始为空的单链表的表头。最后输出单链表的表长。
本题旨在训练学习者熟悉单链表的基本操作,不建议直接输出 nnn。
输入格式:
输入首先在第一行给出非负整数 nnn(≤15\le 15≤15);随后一行给出 nnn 个 int 范围内的整数,数字间以空格分隔。
输出格式:
在一行中输出单链表的表长。
输入样例:
5
1 2 3 4 5
输出样例:
5
解题思路
本题训练单链表的基本操作:头插法建表 + 遍历求表长。
- 定义结点结构
Node,包含数据域data和指针域next,构造函数把next初始化为空。 - 头插法:每读入一个整数,新建结点
p,让p->next指向当前表头head,再更新head = p,新结点总是插在表头前面。 - 求表长:从
head出发,用指针p沿next遍历整条链表,每经过一个结点计数加 1,直到p为空。 - 时间复杂度:O(n)O(n)O(n)(建表 O(n)O(n)O(n) + 计数 O(n)O(n)O(n)),空间复杂度:O(n)O(n)O(n)(链表结点)。
代码流程说明
- 定义链表结点结构
Node(数据域 + 指针域 + 构造函数)。 - 读入 nnn,表头指针
head初始化为空。 - 循环 nnn 次:读入整数 vvv,新建结点
p,用头插法把p插入链表头部。 - 从
head开始遍历链表,统计结点个数cnt。 - 输出
cnt并换行。
代码实现
cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
Node(int d) : data(d), next(nullptr) {}
};
int main() {
int n;
cin >> n;
Node* head = nullptr;
for (int k = 0; k < n; ++k) {
int v;
cin >> v;
Node* p = new Node(v);
p->next = head;
head = p;
}
int cnt = 0;
for (Node* p = head; p; p = p->next) cnt++;
cout << cnt << endl;
return 0;
}
代码流程图
#mermaid-svg-CLWv39XsHAZbjIrc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CLWv39XsHAZbjIrc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CLWv39XsHAZbjIrc .error-icon{fill:#552222;}#mermaid-svg-CLWv39XsHAZbjIrc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CLWv39XsHAZbjIrc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CLWv39XsHAZbjIrc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CLWv39XsHAZbjIrc .marker.cross{stroke:#333333;}#mermaid-svg-CLWv39XsHAZbjIrc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CLWv39XsHAZbjIrc p{margin:0;}#mermaid-svg-CLWv39XsHAZbjIrc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CLWv39XsHAZbjIrc .cluster-label text{fill:#333;}#mermaid-svg-CLWv39XsHAZbjIrc .cluster-label span{color:#333;}#mermaid-svg-CLWv39XsHAZbjIrc .cluster-label span p{background-color:transparent;}#mermaid-svg-CLWv39XsHAZbjIrc .label text,#mermaid-svg-CLWv39XsHAZbjIrc span{fill:#333;color:#333;}#mermaid-svg-CLWv39XsHAZbjIrc .node rect,#mermaid-svg-CLWv39XsHAZbjIrc .node circle,#mermaid-svg-CLWv39XsHAZbjIrc .node ellipse,#mermaid-svg-CLWv39XsHAZbjIrc .node polygon,#mermaid-svg-CLWv39XsHAZbjIrc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CLWv39XsHAZbjIrc .rough-node .label text,#mermaid-svg-CLWv39XsHAZbjIrc .node .label text,#mermaid-svg-CLWv39XsHAZbjIrc .image-shape .label,#mermaid-svg-CLWv39XsHAZbjIrc .icon-shape .label{text-anchor:middle;}#mermaid-svg-CLWv39XsHAZbjIrc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CLWv39XsHAZbjIrc .rough-node .label,#mermaid-svg-CLWv39XsHAZbjIrc .node .label,#mermaid-svg-CLWv39XsHAZbjIrc .image-shape .label,#mermaid-svg-CLWv39XsHAZbjIrc .icon-shape .label{text-align:center;}#mermaid-svg-CLWv39XsHAZbjIrc .node.clickable{cursor:pointer;}#mermaid-svg-CLWv39XsHAZbjIrc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CLWv39XsHAZbjIrc .arrowheadPath{fill:#333333;}#mermaid-svg-CLWv39XsHAZbjIrc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CLWv39XsHAZbjIrc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CLWv39XsHAZbjIrc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CLWv39XsHAZbjIrc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CLWv39XsHAZbjIrc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CLWv39XsHAZbjIrc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CLWv39XsHAZbjIrc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CLWv39XsHAZbjIrc .cluster text{fill:#333;}#mermaid-svg-CLWv39XsHAZbjIrc .cluster span{color:#333;}#mermaid-svg-CLWv39XsHAZbjIrc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CLWv39XsHAZbjIrc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CLWv39XsHAZbjIrc rect.text{fill:none;stroke-width:0;}#mermaid-svg-CLWv39XsHAZbjIrc .icon-shape,#mermaid-svg-CLWv39XsHAZbjIrc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CLWv39XsHAZbjIrc .icon-shape p,#mermaid-svg-CLWv39XsHAZbjIrc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CLWv39XsHAZbjIrc .icon-shape .label rect,#mermaid-svg-CLWv39XsHAZbjIrc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CLWv39XsHAZbjIrc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CLWv39XsHAZbjIrc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CLWv39XsHAZbjIrc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
开始
读入 n
表头 head 初始化为空
k 从 0 到 n-1
读入整数 v
新建结点 p
p 的 next 指向 head
head 指向 p
k 加 1
cnt 初始化为 0
指针 p 从 head 开始是否非空
cnt 加 1
p 移动到下一个结点
输出 cnt
结束
解题流程图
#mermaid-svg-5bTByZIks0NZNiiO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5bTByZIks0NZNiiO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5bTByZIks0NZNiiO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5bTByZIks0NZNiiO .error-icon{fill:#552222;}#mermaid-svg-5bTByZIks0NZNiiO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5bTByZIks0NZNiiO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5bTByZIks0NZNiiO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5bTByZIks0NZNiiO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5bTByZIks0NZNiiO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5bTByZIks0NZNiiO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5bTByZIks0NZNiiO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5bTByZIks0NZNiiO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5bTByZIks0NZNiiO .marker.cross{stroke:#333333;}#mermaid-svg-5bTByZIks0NZNiiO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5bTByZIks0NZNiiO p{margin:0;}#mermaid-svg-5bTByZIks0NZNiiO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5bTByZIks0NZNiiO .cluster-label text{fill:#333;}#mermaid-svg-5bTByZIks0NZNiiO .cluster-label span{color:#333;}#mermaid-svg-5bTByZIks0NZNiiO .cluster-label span p{background-color:transparent;}#mermaid-svg-5bTByZIks0NZNiiO .label text,#mermaid-svg-5bTByZIks0NZNiiO span{fill:#333;color:#333;}#mermaid-svg-5bTByZIks0NZNiiO .node rect,#mermaid-svg-5bTByZIks0NZNiiO .node circle,#mermaid-svg-5bTByZIks0NZNiiO .node ellipse,#mermaid-svg-5bTByZIks0NZNiiO .node polygon,#mermaid-svg-5bTByZIks0NZNiiO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5bTByZIks0NZNiiO .rough-node .label text,#mermaid-svg-5bTByZIks0NZNiiO .node .label text,#mermaid-svg-5bTByZIks0NZNiiO .image-shape .label,#mermaid-svg-5bTByZIks0NZNiiO .icon-shape .label{text-anchor:middle;}#mermaid-svg-5bTByZIks0NZNiiO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5bTByZIks0NZNiiO .rough-node .label,#mermaid-svg-5bTByZIks0NZNiiO .node .label,#mermaid-svg-5bTByZIks0NZNiiO .image-shape .label,#mermaid-svg-5bTByZIks0NZNiiO .icon-shape .label{text-align:center;}#mermaid-svg-5bTByZIks0NZNiiO .node.clickable{cursor:pointer;}#mermaid-svg-5bTByZIks0NZNiiO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5bTByZIks0NZNiiO .arrowheadPath{fill:#333333;}#mermaid-svg-5bTByZIks0NZNiiO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5bTByZIks0NZNiiO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5bTByZIks0NZNiiO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5bTByZIks0NZNiiO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5bTByZIks0NZNiiO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5bTByZIks0NZNiiO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5bTByZIks0NZNiiO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5bTByZIks0NZNiiO .cluster text{fill:#333;}#mermaid-svg-5bTByZIks0NZNiiO .cluster span{color:#333;}#mermaid-svg-5bTByZIks0NZNiiO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5bTByZIks0NZNiiO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5bTByZIks0NZNiiO rect.text{fill:none;stroke-width:0;}#mermaid-svg-5bTByZIks0NZNiiO .icon-shape,#mermaid-svg-5bTByZIks0NZNiiO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5bTByZIks0NZNiiO .icon-shape p,#mermaid-svg-5bTByZIks0NZNiiO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5bTByZIks0NZNiiO .icon-shape .label rect,#mermaid-svg-5bTByZIks0NZNiiO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5bTByZIks0NZNiiO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5bTByZIks0NZNiiO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5bTByZIks0NZNiiO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
求单链表表长
读入 n 个整数
用头插法依次插入链表
链表构建完成
指针指向表头, 计数归零
当前结点是否存在
计数加 1
指针移向下一个结点
输出计数结果