剑指Offer-反转链表

题目描述 反转链表

输入一个链表,反转链表后,输出新链表的表头。

解题思路

转自 https://blog.csdn.net/fx677588/article/details/72357389

链表翻转操作的顺序对于迭代来说是从链头往链尾
迭代的方式是从链头开始处理,如下图给定一个存放5个数的链表。

首先对于链表设置两个指针:


然后依次将旧链表上每一项添加在新链表的后面,然后新链表的头指针NewH移向新的链表头,如下图所示。此处需要注意,不可以上来立即将上图中P->next直接指向NewH,这样存放2的地址就会被丢弃,后续链表保存的数据也随之无法访问。而是应该设置一个临时指针tmp,先暂时指向P->next指向的地址空间,保存原链表后续数据。然后再让P->next指向NewH,最后P=tmp就可以取回原链表的数据了,所有循环访问也可以继续展开下去。

指针继续向后移动,直到P指针指向NULL停止迭代。

最后一步:


代码

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode *newH;
        ListNode *p=NULL;
        
        if(!pHead) return NULL;
        while(pHead){
            newH = pHead;
            pHead = pHead->next;
            newH->next = p;
            p= newH;
        }
        return newH;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目:输入一个链表,反转链表后,输出链表的所有元素。 方法一 递归 一般情况下反转的问题利用递归代码写起来是比较简...
    qming_c阅读 1,202评论 0 0
  • 题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题思路 设置三个指针,head为当前节点,pre为当前节...
    繁著阅读 1,760评论 0 0
  • 本文首发于我的个人博客Suixin’s Blog原文: https://suixinblog.cn/2019/02...
    Sui_Xin阅读 1,652评论 0 1
  • 题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题思路 多再纸上画画 看看 给定链表:1->2->3->...
    Mereder阅读 1,148评论 0 0
  • 午后从黑山头赶往满洲里,车程三小时,路况非常好。 车行顺利,原安排明天游玩的呼伦湖改为今天。太好了...
    贪睡的树熊宝宝阅读 3,161评论 0 1

友情链接更多精彩内容