思路
思路是把原链表的每个箭头的指向都给反转过来,由于改变指向后就不能访问下一个节点,因此得使用双指针。维护一个指针newhead,指向nullptr。然后从链表的头节点开始遍历,每次把新的头节点设为当前节点的next,这是一个让原链表的箭头逐个反向的过程。就像这样:
代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = head;
ListNode* newhead = nullptr;
while (cur != nullptr) {
// 得维护一个newNode,否则改变原链表的指向后会无法继续遍历
ListNode* newNode = cur;
cur = cur->next;
newNode->next = newhead;
newhead = newNode;
}
return newhead;
}
};