前言
在之前的那家公司,自己的技术实力还算排得上号的,然后同事对自己虽然严格(也是为了自己技术实力能有进一步提升),但是也很尊重自己,然后就迷失了自己,用广东的话来说,就是在一声声的靓仔中迷失了。(哭晕)直到需要找工作才发现自己的技术在高新科技公司里面啥都不是,唉,苦逼呀,所以学海无涯呀。
正题
下面进入正题,反转链表。简单的思路就是把前面的那一个结构体的next,指向自己,然后依次往前推,但是要注意,记录下next的next指针,这样才能让你的循环继续下去。
#include <iostream>
using namespace std;
struct NODE
{
int num;
NODE* next;
}* PNODE;
int main()
{
NODE* head = new NODE;
NODE* pTmp = head;
for(int i = 0; i < 10; ++i)
{
NODE* node = new NODE;
node->num = i;
node->next = NULL;
pTmp->next = node;
pTmp = pTmp->next;
}
pTmp = head->next;
while (pTmp)
{
cout << pTmp->num << endl;
pTmp = pTmp->next;
}
//反转
NODE* p1 = NULL;
NODE* p2 = head->next;
while(p2)
{
pTmp = p2->next;
p2->next = p1;
p1 = p2;
p2 = pTmp;
}
head->next = p1;
pTmp = head->next;
pTmp = head->next;
while (pTmp)
{
cout << pTmp->num << endl;
pTmp = pTmp->next;
}
return 1;
}
另外,还有一点心德,就是刷算法不要到了要面试的时候才去刷,这时候刷算法无非是和小学背课本一样,稍稍换点东西,你可能就不会了,还是要日积月累,慢慢消化,提取核心的东西,就像我们高中时解数学题一样。