单链表的逆置

单链表的逆置是面试官非常青睐的题,这个题可以看出面试者对链表和指针的操作。
而且问题也很好描述,一句话就表达出了自己的题。
----------------------------------------------------------------------------------------------
一、算法思想:(头插法)
<1>,将源链表分为链表头和链表实体。
<2>,将链表实体节点用头插法依次插入到链表头中。
<3>,如果链表实体插完则算法结束,否则转到<2>.

--------------------------------------------------------------------------------------------
二、算法的实现:

头插法:

void reverse(struct node *head)
{
        if (head == NULL)
            return ;
        struct node *p = head->next,*pnext = NULL;
        head->next = NULL;
        while (p != NULL) {
                pnext = p->next;
                p->next = head->next;
                head->next = p;
                p = pnext;
        }
        return ;
}

 利用辅助指针

void ListReverse2(LinkList L)
{
    LNode *real = L->next;          //带头结点的链表,real指向第一个实结点
    //real为NULL,则链表为只含头结点的空表
    //real->nexxt为NULL,则链表只含有一个结点
    if(real == NULL || real->next == NULL)          
        return;

    LNode *pre = real;              //先前指针
    LNode *cur = real->next;        //当前指针
    LNode *suc = NULL;              //后继指针

    while(cur != NULL)
    {
        suc = cur->next;
        cur->next = pre;

        pre = cur;
        cur = suc;
    }
    real->next = NULL;              //while执行后第一个结点和第二个结点互指

    L->next = pre;                  //记录新的头结点
}
原文地址:https://www.cnblogs.com/wft1990/p/6875485.html