前言
在之前的那家公司,自己的技術實力還算排得上號的,然後同事對自己雖然嚴格(也是爲了自己技術實力能有進一步提升),但是也很尊重自己,然後就迷失了自己,用廣東的話來說,就是在一聲聲的靚仔中迷失了。(哭暈)直到需要找工作才發現自己的技術在高新科技公司裏面啥都不是,唉,苦逼呀,所以學海無涯呀。
正題
下面進入正題,反轉鏈表。簡單的思路就是把前面的那一個結構體的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;
}
另外,還有一點心德,就是刷算法不要到了要面試的時候纔去刷,這時候刷算法無非是和小學背課本一樣,稍稍換點東西,你可能就不會了,還是要日積月累,慢慢消化,提取核心的東西,就像我們高中時解數學題一樣。