您的位置:首页 > 理论基础 > 数据结构算法

数据结构之单链表反转

2010-07-23 17:24 295 查看
前些天在CSDN上看到一篇老外公司招程序员的报道,说想招到会写程序的人真是很难,许多来应聘的人连单链表反转也写不出来,我就想自己试一下。就像很多算法一样,单链表反转思路挺简单,但是要写出没有明显漏洞的代码还是需要一段时间的。

单链表反转的基本思路有两种:

1)反转节点的指针next;

2)直接反转节点,每次拿到一个节点,都插入到连表最前端。

第一种方法的代码如下:

Node* revert_list(Node* pNode)
{
assert(pNode != NULL);
Node* pPre = NULL;
Node* pCur = pNode;
Node* pNext = pCur->next;
while (pNext)
{
pCur->next = pPre;
pPre = pCur;
pCur = pNext;
pNext = pCur->next;
}
pCur->next = pPre;
return pCur;
}


第二种方法的代码如下:

Node* revert_list(Node* pNode)
{
assert(pNode != NULL);
Node* pHead = pNode;
Node* pCur = pNode;
Node* pNext = pCur->next;
while (pNext)
{
pCur->next = pNext->next;
pNext->next = pHead;
pHead = pNext;
pNext = pCur->next;
}
return pHead;
}


两种算法的代码看上去很像,不过还是有本质的区别:方法一中pCur一直在向尾节点遍历,而方法二中的pCur则一直保持不变,这也体现了两种算法的不同之处。当然,算法的实现也可以有别的写法,并不局限于这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: