翻转链表
翻转链表
思想:使用三个指针pre,cur,np
每次指针顺序移动后,pre结点被正确归位,while循环之后的状态见下图:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr)
{
return head;
}
ListNode* pre = nullptr;
ListNode* cur = head;
ListNode* np = head->next;
while (np != nullptr)
{
cur->next = pre;
pre = cur;
cur = np;
np = np->next;
}
// cur 还未完成翻转
cur->next = pre;
return cur;
}
};