单向链表的翻转通常是经常遇到的问题,接下来我用两种方式来进行链表的翻转!
三指针法
三指针毫无疑问就是使用三个指针去翻转链表,这种方式可以是我们很容易的实现链表的翻转,首先定义三个指针,分别指向第一个节点、第二个节点、第三个节点,然后由于我们保存了节点的地址,当然也就可以随心所欲的操作这些节点的指向了!
代码如下
//6. 逆置/反转单链表
void ReverseList(pList* pplist)
{
pNode pCur = NULL;
pNode tmp = NULL;
pNode tmp2 = NULL;
assert(pplist != NULL);
assert(*pplist != NULL);
//将三个指针赋值
pCur = *pplist;
tmp = pCur->next;
tmp2 = tmp->next;
//原头节点先赋值为NULL
pCur->next = NULL;
while (tmp2 != NULL)
{
//改变指向
tmp->next = pCur;
//3个指针后移
pCur = tmp;
tmp = tmp2;
tmp2 = tmp2->next;
}
//循环完毕最后一步的处理
*pplist = tmp;
tmp->next = pCur;
}
递归写法
TODO 递归 Tim