算法(续)反转链表

前言

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

正题

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值