剑指Offer-代码的鲁棒性面试题24:反转链表

Posted flix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer-代码的鲁棒性面试题24:反转链表相关的知识,希望对你有一定的参考价值。

题目描述

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

思路

一个比较经典的题目。要维护3个指针:当前结点的指针curNode、当前结点的前一个结点的指针preNode和当前结点的下一个结点的指针nextNode。首先使用nextNode保存curNode的下一个结点地址,不然链表会断掉,然后将curNode指向preNode,将preNode改为curNode,curNode改为nextNode。当当前结点curNode的下一个结点为nullptr时说明已经到达最后一个节点,curNode就是反转后的链表头。
技术图片

代码如下:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead==nullptr)
            return nullptr;
        
        ListNode* curNode = pHead;
        ListNode* preNode = nullptr;
        ListNode* nextNode = nullptr;
        while(curNode!=nullptr){
            nextNode = curNode->next;
            curNode->next = preNode;    //注意这一行和下一行的顺序
            if(nextNode==nullptr)
                return curNode;
            preNode = curNode;
            curNode = nextNode;
        }
        return nullptr;
    }
};

以上是关于剑指Offer-代码的鲁棒性面试题24:反转链表的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer - 代码的鲁棒性

剑指offer3.4-代码的鲁棒性

代码的鲁棒性:反转链表

剑指offer 17. 代码的鲁棒性树的子结构

剑指offer14

剑指 14. 代码的鲁棒性链表中倒数第k个结点