链表-链表逆置

作者: 茶还是咖啡 | 来源:发表于2020-03-05 08:14 被阅读0次

    给定一根链表,将链表进行逆置

    eg:
    1->2->3->4->5
    逆置后:
    5->4->3->2->1

    1. 这个题目如果直接从头开始想比较困难,我们可以先想象链表已经逆置了一部分,如图


    2. 那么下一个需要逆置的节点即为指针p指向的节点,可以看出,我们需要将p节点从原来的链表中摘除下来,然后头插到新的链表上,如图:


    3. 这样,我们便将p节点逆置完成,然后重新整理一下指针的指向,如图:



      此时,又回到了刚才的情况,然后直接重复上面的动作即可。

    4. 现在我们再来分析一下初始情况,初始情况,其实我们可以想象成新的链表是一个空的链表,如图:



      这样看来,和上面链表的情况就保持一致了,也可以重复上面的动作进行逆置。

    code

    ElemSN* preLinkList(ElemSN *head){
        if(NULL==head){
            return NULL;
        }
        ElemSN *p = head,*q = NULL,*hn = NULL;
        while (p) {
            q=p->next;
            p->next = hn;
            hn = p;
            p=q;
        }
        return hn;
    }
    

    相关文章

      网友评论

        本文标题:链表-链表逆置

        本文链接:https://www.haomeiwen.com/subject/phfphhtx.html