链表逆序C++
题目
将给定链表逆序,返回逆序后的链表头。
思路
创建三个指针,一个执行当前节点,一个指向前节点,一个指向后节点。由于挺简单,直接代码就能看明白。
代码
#include <stdio.h>
class linklist
{
public:
linklist(int tmp)
:value(tmp)
{}
class linklist *link;
int value;
};
/* create list */
linklist *create_list(linklist *head)
{
int tmp;
linklist *p = NULL;
for(int i = 0; i < 5; i++)
{
p = new linklist(i);
if (p != NULL)
{
p->link = head;
head = p;
}
}
return head;
}
/* reverse list */
linklist *reverselist(linklist *list)
{
linklist *Pnode = list;
linklist *Pprenode = NULL;
linklist *Pnextnode = NULL;
while(Pnode != NULL)
{
Pnextnode = Pnode->link;
if(Pnextnode == NULL)
{
Pnode->link = Pprenode;
return Pnode;
}
else
{
Pnode->link = Pprenode;
Pprenode = Pnode;
Pnode = Pnextnode;
}
}
return Pnode;
}
int main(int argc, char *argv[])
{
linklist *PoldListHead = create_list(NULL);
linklist *Ptmp = PoldListHead;
while(Ptmp != NULL)
{
printf("value is :%d\n\n", Ptmp->value);
Ptmp = Ptmp->link;
}
linklist *PnewListHead = reverselist(PoldListHead);
Ptmp = PnewListHead;
while(Ptmp != NULL)
{
printf("reverse value is :%d\n", Ptmp->value);
Ptmp = Ptmp->link;
}
}
当然字段代码写给面试官,还不ok。有比较严重的问题,面试官肯定能发现,就意味着多半无缘了。其实很简单,就是内存没有释放的问题,有了new就一定要有delete,记住。