(C++编程题)反转链表

描述

给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。

数据范围: n\leq1000n≤1000

要求:空间复杂度 O(1) ,时间复杂度 O(n) 。

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

方案一:利用 vector 存储 空间复杂度O(n),不符合题目要求

//ListNode 定义 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode *pHead) { if(!pHead) return nullptr; vector<ListNode*> v; while(pHead){ v.push_back(pHead); //push_back 将元素放在 vector 的最后一位的下一位 pHead = pHead -> next ; } reverse(v.begin(), v.end()); //反转函数 ListNode *head = v[0]; //新链表的头 ListNode *cur = head; //工作指针 for(int i=1; i<v.size() ;++i){ cur ->next = v[i]; cur = cur->next; } cur->next = nullptr; //尾部置为 nullptr return head; } };

采用指针直接更改链表 空间复杂度 O(1)

/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution{ public:ListNode* ReverseList(ListNode *pHead){ ListNode* p = nullptr; //新链表的头 ListNode* q = nullptr; //工作指针 while(pHead){ q = pHead ->next; pHead ->next = p; p = pHead ; pHead = q ; } return p ; } };

 


__EOF__

本文作者Stdio.Qu
本文链接https://www.cnblogs.com/czarQ/p/17537217.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   沉淀i  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示