给定一根链表,将链表进行逆置
eg:
1->2->3->4->5
逆置后:
5->4->3->2->1
-
这个题目如果直接从头开始想比较困难,我们可以先想象链表已经逆置了一部分,如图
-
那么下一个需要逆置的节点即为指针p指向的节点,可以看出,我们需要将p节点从原来的链表中摘除下来,然后头插到新的链表上,如图:
-
这样,我们便将p节点逆置完成,然后重新整理一下指针的指向,如图:
此时,又回到了刚才的情况,然后直接重复上面的动作即可。
-
现在我们再来分析一下初始情况,初始情况,其实我们可以想象成新的链表是一个空的链表,如图:
这样看来,和上面链表的情况就保持一致了,也可以重复上面的动作进行逆置。
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;
}
网友评论