鏈表逆序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,記住。