剑指offer 编程题(14):链表倒序
来源:互联网 发布:在淘宝买护肤品靠谱吗 编辑:程序博客网 时间:2024/06/06 07:16
题目描述
输入一个链表,反转链表后,输出链表的所有元素。
三个指针 pre ,cur,next
初始状态,pre是NULL,cur指向当前的头节点Hhead,next指向头节点Hhead的下一个节点B。首先从A节点开始逆序,将A节点的next指针指向prev,因为prev的当前值是NULL,所以A节点就从链表中脱离出来了,然后移动head和next指针,使它们分别指向B节点和B的下一个节点C(因为当前的next已经指向B节点了,因此修改A节点的next指针不会导致链表丢失)。
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode* head = NULL; ListNode* pre = NULL; ListNode* pnext = head->next; head = pHead; if(pHead == NULL) { return NULL; } while(head != NULL) { //先保存head的next节点,再让head指向前驱结点 pnext = head->next; head->next = pre; //让head 和pre两个指针向前走 pre = head; head = pnext; } return pre; }};
//第二种方法是:递归方法 /*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { //如果链表为空或者链表中只有一个元素 if(pHead==NULL||pHead->next==NULL) return pHead; //先反转后面的链表,走到链表的末端结点 ListNode* pReverseNode=ReverseList(pHead->next); //再将当前节点设置为后面节点的后续节点 pHead->next->next=pHead; pHead->next=NULL; return pReverseNode; }};
阅读全文
0 0
- 剑指offer 编程题(14):链表倒序
- 剑指offer 编程题(3):链表倒序输出到vector
- 剑指offer-倒序打印链表
- 牛客网剑指offer编程题--从尾到头打印链表(倒序打印链表)
- 剑指Offer面试题5——倒序输出一个链表
- 剑指offer 编程题(13):链表遍历
- 剑指offer 编程题(15):链表合并
- 剑指offer 编程题(24):链表复制
- 剑指offer 编程题(35):链表公共点
- 实验题 链表倒序
- 剑指offer编程题
- 单链表的创建,查找,删除,顺序打印,倒序打印(剑指offer)
- 剑指offer经典编程题(一)
- 剑指offer编程题(1):数组
- 笔试经典题之链表倒序
- 链表(7)----倒序打印链表
- 单向链表倒序
- 链表倒序算法
- Chrome 去掉“该网站的安全证书不受信任!”的提示
- 你所了解的KVM有多少类别?
- shiro自定义权限标签的坑
- 技术分享连载(八十九)
- 基于koa2 + mongodb + handlebars 开发博客系统
- 剑指offer 编程题(14):链表倒序
- MQTT协议(1)-简介
- DrawLayout的使用
- Echarts学习 堆叠柱状图 柱子样式颜色及透明度宽度间隔修改
- 背包
- webpack学习
- C++ 循环
- oracle开启附加(补充)日志
- python 直接用账号密码cookie登陆人人网获取页面