输入一个链表,反转链表后,输出链表的所有元素。
来源:互联网 发布:淘宝类目搜索排名 编辑:程序博客网 时间:2024/05/19 17:51
剑指offer:输入一个链表,反转链表后,输出链表的所有元素。
两种思路:
思路1:建立节点指针类型堆栈,遍历链表,将指针压栈,顺次出栈,实现反转。这个占用内存空间较大。
思路2:依次遍历链表,改变节点的指向,注意之前要将下一个节点的地址赋值给一个指针next保存。
事实上,next指针表示去掉已经反转的链表的第二个节点,pre指针表示反转过的链表表头,pHead指针表示去掉已经反转的链表的表头。
代码如下:
//#include <stdio.h> #include <stdlib.h> #include <vector> #include <stack> #include <math.h> #include <iostream>using namespace std;struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode* pre =NULL;//链表第一元素个元素不存在时,指向空地址ListNode* next = NULL;while(pHead != NULL){next = pHead->next;//保存下一个节点pHead->next = pre;//反转尾链表的头结点pre=pHead;//改变头链表的头结点位置pHead = next;//跟新尾链表的头节点位置} return pre; }}; int main() { struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* r = (struct ListNode*)malloc(sizeof(struct ListNode)); p->val = 0; p->next = NULL; for(int i = 3; i >= 1; i--){ struct ListNode* t = (struct ListNode*)malloc(sizeof(struct ListNode)); t->val = i; t->next = p->next; p->next=t; } Solution s; r = s.ReverseList(p); cout << r->val << endl; system("pause"); return 0; }
阅读全文
0 0
- 剑指offer:输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- java 输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。就地逆转,头插法
- java实现输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 剑指offer--输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 反转链表后,输出链表的所有元素。
- 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
- 输出反转链表
- 链表的建立、输出、非递归反转、递归反转
- 链表指定区间元素的反转
- 给定一个链表,要求每隔k个元素反转
- springboot整合jedisCluster
- vue 实战 之 饿了吗 页头模板
- 设计模式之抽象工厂
- 通过PL/SQL创建序列和触发器实现表自增字段
- JavaScript面向对象编程
- 输入一个链表,反转链表后,输出链表的所有元素。
- list集合为空或为null的区别
- 无apk加壳无防护app是有多危险,看了几维安全专业检测你就知道了
- java-并发集合-并发队列 ConcurrentLinkedQueue 演示
- C 和C++的 回调 函数
- 基本的增删改查
- 今日小程序推荐:查名宝-取好名,创好业!
- 已有项目依赖cordovaLib打包后调用插件崩溃问题
- js遍历树算出树的深度