一共3个指针。head是当前指针,pre是前驱,pnext是后驱。
核心步骤就4步:
- 确定pnext的位置
- 令head指向pre
- pre移动到head的位置
- head移到pnext的位置
如此就一路往后改变指针方向。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode* reverseList(ListNode* head){
if(!head)
return head;
ListNode* pre = nullptr;//这里很关键,令head指向NULL.否则会指向未知位置
while(head){
ListNode* pnext=head->next;
head->next = pre;
pre = head;
head =pnext;
}
return pre;
}