题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
//要用到3根指针来保证不丢。挺麻烦。题解中的双链表法,每次从原链表里摘下来的下一个节点都挂到新链表的头部,以此实现反转,这个想法很妙。 class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead->next==nullptr || pHead==nullptr) return pHead;//说明只有一个节点。 ListNode*previous=pHead; ListNode*current=pHead->next;//从第二个节点开始。 ListNode*next=nullptr; pHead->next=nullptr; while (current!=nullptr) { next=current->next;//缓存next节点,省得过会修改current->next指向后回不去了。 current->next=previous;//修改指向 previous=current;//递进 current=next;//递进 } return previous; } };