206. 反转链表
做题思路 or 感想:
1,用双指针法便可解决
2,这种链表的题自己画一下图就很快理解了,相当有意思啊
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode() : val(0), next(nullptr) {} 7 * ListNode(int x) : val(x), next(nullptr) {} 8 * ListNode(int x, ListNode *next) : val(x), next(next) {} 9 * }; 10 */ 11 class Solution { 12 public: 13 ListNode* reverseList(ListNode* head) { 14 if (head == nullptr)return nullptr; //防止奇怪的测试用例 15 ListNode* slow = nullptr; //初始化两个指针 16 ListNode* fast = head; 17 while (fast != nullptr) { 18 ListNode* temp = fast->next; //用temp储存后面的方向,防止后面的指针丢失方向 19 fast->next = slow; //快节点指向后面(反转),然后快慢指针同时向前走一个节点的位置 20 slow = fast; 21 fast = temp; 22 } 23 return slow; //最后fast为nullptr,得到的slow固然是新的头节点了 24 } 25 };