关于链表的逆置方法有许多,这里给大家讲述一下应用较为普遍的头插法和就地逆置法,解决问题的关键在于我们要学会自己画图去理解具体逆置的过程,有了思路,问题的解决自然就简单了很多。
头插法:
我的思路是先创建一个空结点pHead,然后让它指向NULL;然后定义三个指针变量,pCur是沿着原链表走,pPrev标记 pCur前一位依次把结点拆下来,插在pHead与pHead的next之间,循环至结束。
代码:
Node*_ReverseList(PNode*ppHead)
{
assert(ppHead);
Node*pCur = *ppHead;//接收头结点
Node*pPrev = NULL;
Node*pHead = BuyNode(NULL);//创建空结点
while (pCur)
{
pPrev = pCur;//赋值
pCur = pCur->pNext;//往后走一位
pPrev->pNext = pHead->pNext;//pPrev指向pHead的下一位
pHead->pNext=pPrev;//然后再把pHead与pPrev连上
}
pHead = pHead->pNext;//为了好看把空结点去掉
return pHead;
}
就地逆置法:
思路是在原链表上进行逆置,同理,pCur沿着单链表走,pPrev标记其前一位,pTmp作为逆置之后的表头,每次逆置一遍更新pTmp一次。
Node*ReverseList(PNode*ppHead)
{
assert(ppHead);
Node*pCurNode = *ppHead;//接收头结点
Node*pPrevNode

本文介绍了链表逆置的两种常见方法:头插法和三指针法。通过画图理解逆置过程是解决问题的关键,掌握了这种方法,链表逆置问题将变得简单易解。
5843

被折叠的 条评论
为什么被折叠?



