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 };

 

posted @ 2022-03-23 17:29  北原春希  阅读(31)  评论(0)    收藏  举报