206 反转链表


206. 反转链表

img

基本思路

反转链表,仅仅需要扭转链表的指向顺序即可,如果用双指针实现的话,一个快指针,一个慢指针指向相邻的两个结点,并将结点的指向顺序改变即可。

思考一些细节问题,在扭转之前,我们需要一个空指针作为扭转后的尾部。

好,看代码

  ListNode* reverseList(ListNode* head) {
ListNode* p0 = nullptr;
      ListNode* p1 = head;
      while(p1 != nullptr){
      	ListNode* p2 = p1->next;  
          p1->next = p0;
          p0 = p1;
          p1 = p2;
      }
      
      return p0;
  }

有几个点需要注意:

  • p0 作为 左指针, p1作为右指针

  • line6 首先要记录下p1的下一个指针,因为反转之后就变了

  • line8 一定要在line9之前

完整代码

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
		ListNode* p0 = nullptr;
        ListNode* p1 = head;
        while(p1 != nullptr){
        	ListNode* p2 = p1->next;  
            p1->next = p0;
            p0 = p1;
            p1 = p2;
        }
        
        return p0;
    }
};

文章作者: BeWater
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BeWater !
评论
  目录