算法(續)反轉鏈表

前言

在之前的那家公司,自己的技術實力還算排得上號的,然後同事對自己雖然嚴格(也是爲了自己技術實力能有進一步提升),但是也很尊重自己,然後就迷失了自己,用廣東的話來說,就是在一聲聲的靚仔中迷失了。(哭暈)直到需要找工作才發現自己的技術在高新科技公司裏面啥都不是,唉,苦逼呀,所以學海無涯呀。

正題

下面進入正題,反轉鏈表。簡單的思路就是把前面的那一個結構體的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;
}

另外,還有一點心德,就是刷算法不要到了要面試的時候纔去刷,這時候刷算法無非是和小學背課本一樣,稍稍換點東西,你可能就不會了,還是要日積月累,慢慢消化,提取核心的東西,就像我們高中時解數學題一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章