Leetcode:反转链表

思路分析:

  (1)定义三个 链表指针,分别指向NULL、头节点以及头节点的下一个位置

  (2)进入while循环,循环条件是中间节点不能为空

  (3)循环中的操作就是将中间指针指向左指针,因此左指针的应该为反转链表的尾巴,所以初值为NULL,右指针的作用就是方便中间指针改变指向之后,可以移动到改变之前的下一个位置。

  (4)最后返回左指针即可。 

代码实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
            if(head==nullptr||head->next==nullptr)
              return head;
           ListNode* p0=nullptr;
           ListNode* p1=head;
           ListNode* p2=head->next;
           while(p1!=nullptr)
           {
                 p1->next=p0;
                 p0=p1;
                 p1=p2;
                 if(p2!=nullptr)
                   p2=p2->next;
           }
         return p0;
    }
};


版权声明:本文为weixin_63638351原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。