解题思路:
利用三个指针 left、right、tmp。left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head || !head->next) return head;
ListNode* left = head;
ListNode* right = head->next;
left->next = NULL;
ListNode* tmp;
while(right){
tmp = right->next;
right->next = left;
left = right;
right = tmp;
}
return left;
}
};