反转链表

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

注意这里是没有头结点的(就是pHead指向的是第一个元素的地址)

思路:

//利用两个指针Pcur指向当前,PNew执行要返回的,和一个中间指针变量保存当前结点的下一个结点
//我们需要从第二个节点开始遍历,将当前节点的 next 指向前一个节点。
//这里需要注意的是,该变当前节点的 next 时,需要提前保存 next,不然遍历就会中断。  (画出来图就是个环)

 前两个节点就是形成了个环形

代码:

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if (pHead == nullptr || pHead->next == nullptr)
            return pHead;
        ListNode *pCur = pHead;   // 指向第一个元素
        ListNode *pNew = nullptr;  // 存放反转后的头指针
        
        while(pCur!= nullptr)
        {
            // 临时变量temp指向当前指针的后一个节点(就是第二个节点)
            ListNode *temp = pCur->next;
            pCur->next = pNew;   // (第二个节点指向new)
            pNew = pCur;         // new指向第一个节点
            pCur = temp;         //第一个节点指向临时变量(保存的第二个节点)
        }
        return pNew;             // 形成一个环形状
    }
};
原文地址:https://www.cnblogs.com/xiaokang01/p/12493165.html