一、单链表反转
LinkList Reserve_L(LinkList L)
{
if(L==NULL||L->next==NULL)
return 0;
LNode *p,*r;
p=L->next;//指向第一个结点
L->next=NULL;//把头结点摘下来
while(p!=NULL)
{
r=p->next;//向后遍历
p->next=L->next;//把p指向的结点摘下来, 第一次时next=null 充当最后一个结点
L->next=p;//头插法,把第一个结点插在表头之后
p=r;
}
}
上面这一种是 不算表头的 表头里没有数据
下面这一种是表头带数据,表头也要丢到最后
ListNode* ReverseList(ListNode* pHead) {
if(pHead==NULL)
return NULL;
ListNode* pNode=pHead;//当前指针
ListNode* pReverseHead=NULL;//新链表的头指针
ListNode* pPrev=NULL;//当前指针的前一个结点
while(pNode!=NULL){//当前结点不为空时才执行
ListNode* pNext=pNode->next;//链断开之前一定要保存断开位置后边的结点
if(pNext==NULL)//当pNext为空时,说明当前结点为尾节点
pReverseHead=pNode;
pNode->next=pPrev;//指针反转