反转链表

题目描述:

输入一个链表,反转链表后,输出新链表的表头。
示例1
输入:
{1,2,3}
返回值:
{3,2,1}

**分析:**

解释
链表:一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的),包括数据域和指针域,数据域存数据,指针域指示其后继节点的地址信息。
图片说明
链表的分类:单链表、双链表、循环链表

题目要求输入一个链表(这里我们就默认是单链表了),对其进行反转后输出新链表的表头

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if(pHead == NULL || pHead->next == NULL){
         //如果当前链表为空,或者下个节点为空,就返回当前节点即可
            return pHead;
        }
        ListNode *l1 = pHead;
        ListNode *l2 = l1->next;
        l1->next = NULL;
        ListNode *l3 = l2->next;
        while(l2 != NULL){
            l2->next = l1;
            l1=l2;
            l2=l3;
            if(l3 != NULL){
                l3 = l3->next;
            }
        }
             return l1;
    }
};