算法(续)反转链表

前言

在之前的那家公司,自己的技术实力还算排得上号的,然后同事对自己虽然严格(也是为了自己技术实力能有进一步提升),但是也很尊重自己,然后就迷失了自己,用广东的话来说,就是在一声声的靓仔中迷失了。(哭晕)直到需要找工作才发现自己的技术在高新科技公司里面啥都不是,唉,苦逼呀,所以学海无涯呀。

正题

下面进入正题,反转链表。简单的思路就是把前面的那一个结构体的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;
}

另外,还有一点心德,就是刷算法不要到了要面试的时候才去刷,这时候刷算法无非是和小学背课本一样,稍稍换点东西,你可能就不会了,还是要日积月累,慢慢消化,提取核心的东西,就像我们高中时解数学题一样。

原创文章 19 获赞 1 访问量 436

猜你喜欢

转载自blog.csdn.net/weixin_45718152/article/details/105602415