Leetcode 206. 反转链表 解题思路及C++实现

解题思路:

利用三个指针 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;
    }
};

 

 

 

你可能感兴趣的:(Leetcode)