反转链表
输入一个链表,反转链表后,输出新链表的表头。
注意这里是没有头结点的(就是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; // 形成一个环形状 } };