逆转链表的小代码,求问错误在哪里呐~

List Reverse( List L )
{
PtrToNode p1=p2=p3=NULL;
p1=p2=p3=L;
p2=p1->Next;
p3=p2->Next;
p1->Next=NULL;
while(p2!=NULL)
{
p2->Next=p1;
p1=p2;
p2=p3;
if(p3!=NULL)
p3=p3->Next;
}
L->Next=p1;

        return L;

}

 SListNode* ReverseSeqList(SListNode *Seq) //逆置/反转单链表 
{
    SListNode *prev=Seq; //保存头节点
    SListNode *cur=prev->_next;  //保存第二个节点
    SListNode *tmp;
    assert(Seq);
    prev->_next=NULL;  //置空头节点的next,变成尾节点
    while (cur!=NULL)  //循环逆置 
    {
        tmp=cur->_next;  
        cur->_next=prev;
        prev=cur;
        cur=tmp;
    }
    Seq=prev;  //逆置后的头
    return Seq;
}

对照下我写过的代码。原文链接:http://blog.csdn.net/qq_38646470/article/details/78976421

List Reverse( List L )
{
PtrToNode p1,p2,p3;
if(L==NULL||L->Next==NULL) //1
return L; //1
p1=p2=p3=L;
p2=p1->Next;//这里如果p1为NULL的话,会出现错误。
p3=p2->Next;//这里如果p2为NULL会出现错误。为了解决这两个错误加入1号两行代码,排除链表为空和只有一个结点的情况
p1->Next=NULL;
while(p2)
{
p2->Next=p1;
p1=p2;
p2=p3;
if(p3!=NULL)
p3=p3->Next;
}

        //L->Next=p1; //整个链表逆转的话就算有头结点也要把头结点放到最后,修改为2号代码  
        L->Next = NULL;//2
        L=p1;     //2
        return L;

}

更改有1、2两处。

List Reverse( List L )
{
PtrToNode p1,p2,p3;
if(L==NULL||L->Next==NULL) //1
return L; //1
p1=p2=p3=L;
p2=p1->Next;//这里如果p1为NULL的话,会出现错误。
p3=p2->Next;//这里如果p2为NULL会出现错误。为了解决这两个错误加入1号两行代码,排除链表为空和只有一个结点的情况
p1->Next=NULL;
while(p2)
{
p2->Next=p1;
p1=p2;
p2=p3;
if(p3!=NULL)
p3=p3->Next;
}

List Reverse( List L )
{
PtrToNode p1,p2,p3;
if(L==NULL||L->Next==NULL) //1
return L; //1
p1=p2=p3=L;
p2=p1->Next;//这里如果p1为NULL的话,会出现错误。
p3=p2->Next;//这里如果p2为NULL会出现错误。为了解决这两个错误加入1号两行代码,排除链表为空和只有一个结点的情况
p1->Next=NULL;
while(p2)
{
//。。。。。。。。。。。。。。。。
}