当前位置: 首页 > news >正文

阿里云如何添加新网站做数学题网站

阿里云如何添加新网站,做数学题网站,网站说服力 营销型网站策划 下载,手机app定制开发公司链表反转(链表 迭代 / 递归) 题目描述:给你单链表的头节点 head,请你反转链表,并返回反转后的链表头节点。 示例:输入链表 1→2→3→4→5 → 输出 5→4→3→2→1。 思路提示:迭代法&#xff1a…

链表反转(链表 + 迭代 / 递归)
题目描述:给你单链表的头节点 head,请你反转链表,并返回反转后的链表头节点。
示例:输入链表 1→2→3→4→5 → 输出 5→4→3→2→1。
思路提示:

迭代法:用三个指针 prev(前一个节点,初始 nullptr)、curr(当前节点,初始 head)、next(临时存储下一个节点),遍历链表时依次修改 curr->next = prev,再更新三个指针。
递归法:递归反转 head 的下一个节点,再将 head 接到反转后的链表尾部,时间复杂度 O (n),空间复杂度 O (n)(递归栈)。

#include <iostream>using namespace std;// ---------- 1. 节点定义 ----------
struct ListNode {int val;ListNode* next;ListNode(int v = 0, ListNode* n = nullptr) : val(v), next(n) {}
};// ---------- 2. 迭代法 ----------
ListNode* reverseList_iter(ListNode* head) {ListNode* prev = nullptr;   // 新链表的头ListNode* curr = head;      // 正在处理的节点while (curr) {ListNode* nextTmp = curr->next; // 临时保存下一个curr->next = prev;             // 反向prev = curr;                   // prev 前进一步curr = nextTmp;                // curr 前进一步}return prev;  // prev 变成新头节点
}// ---------- 3. 递归法 ----------
ListNode* reverseList_recur(ListNode* head) {if (!head || !head->next) return head;   // 空或最后一个节点ListNode* newHead = reverseList_recur(head->next); // 先反转后面的链表head->next->next = head;   // 把当前节点接到已反转部分的尾巴head->next = nullptr;      // 防止成环return newHead;
}// ---------- 4. 辅助:打印链表 ----------
void printList(ListNode* head) {for (ListNode* p = head; p; p = p->next)cout << p->val << (p->next ? "→" : "");cout << endl;
}// ---------- 5. 测试 ----------
int main() {// 构造 1→2→3→4→5ListNode* head = new ListNode(1);head->next = new ListNode(2);head->next->next = new ListNode(3);head->next->next->next = new ListNode(4);head->next->next->next->next = new ListNode(5);cout << "Original: "; printList(head);// 迭代版ListNode* newHead_iter = reverseList_iter(head);cout << "Reversed (iter): "; printList(newHead_iter);// 递归版(再反转回来演示)ListNode* newHead_recur = reverseList_recur(newHead_iter);cout << "Re-reversed (recur): "; printList(newHead_recur);return 0;
}

拆解 1:构造函数的参数与默认值
构造函数 ListNode(int v = 0, ListNode* n = nullptr) 有两个参数:

int v:用于初始化 val(节点数据),默认值为 0
ListNode* n:用于初始化 next(下一个节点指针),默认值为 nullptr(空指针)

默认参数的作用:调用构造函数时,可以不传参数、传 1 个参数或传 2 个参数,非常灵活。

拆解 2:初始化列表 : val(v), next(n)
这是 C++ 的初始化列表语法,作用是在构造函数体执行前,直接初始化成员变量:

val(v):将成员变量 val 初始化为参数 v 的值
next(n):将成员变量 next 初始化为参数 n 的值

相比在构造函数体内赋值(如 val = v;),初始化列表更高效,尤其适合 const 成员或自定义类型成员的初始化。

http://www.dtcms.com/a/496766.html

相关文章:

  • flash网站cms合肥网站建设哪家专业
  • JEP、exp4j和Expression4j解析公式对比
  • 756ka网站建设博客发布 网站模版
  • Python| intake | 无法将读取的nc数据转为xarray格式 | to_dask()
  • 电商导购网站开发四川企业seo
  • VLLM-大模型部署Qwen3-8b
  • @FeignClient 添加请求头header的4种方法
  • 网站建设人员考核设计师联盟网
  • python做个人网站前端后端
  • git一个分支最后一条记录合并到另一条分支上
  • 阿里云可以做电影网站吗淘宝网站建设概要
  • Coze 与 n8n 深度对比:AI智能体平台与工作流自动化的核心博弈
  • 西安正规网站建设报价做个网站app吗
  • 做网站主要学什么软件室内设计网站公司
  • 【Leetcode hot 100】45.跳跃游戏Ⅱ
  • 北京建设局网站百度seo快排软件
  • 免费优化网站建设中建一局
  • 流氓软件AlibabaProtect无需第三方软件无需重启电脑的清理方法
  • 自助建站网站手机网站设计规范
  • 平邑县建设局网站wordpress安装在哪
  • 东莞网站seo价格电脑系统重装wordpress
  • 做网站建设销售途径四川省住建设厅网站
  • 简单大气的企业网站广东网站建设建站模板
  • 2017自己做网站的趋势网络营销定价的特点有
  • BT BlueZ软硬件环境介绍
  • 智能防雷产品应用解决方案
  • 怎么样申请网站域名优秀的包装设计案例
  • 网站维护要求wordpress最好的编辑器下载地址
  • C++ 多态(1)
  • 中国空间站组成部分三门峡 网站开发