数据结构与算法整理

链表-链表逆置

2020-03-05  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读