前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单向链表翻转实现

单向链表翻转实现

作者头像
sean.liu
发布2022-09-29 11:40:26
2810
发布2022-09-29 11:40:26
举报
文章被收录于专栏:云计算技术笔记

链表管理会用到指针,指针是非常灵活的数据结构,但也容易掉坑里。 翻转链表,主要是要考虑好它的结构。可以画图来帮助思考。然后就是注意一些变量的变化。

代码语言:javascript
复制
#include <string>
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
#define LL long long

struct node{
       int x;
       node *next;
};
//输出
int printlist(node *ps){
    while(ps!=NULL){
       printf("%d %d %d\n",ps,ps->x,ps->next);
       ps=ps->next;
    }
    return 0;
}
//翻转
node *overturn(node *start){
         //开始反转
    node *ps=start;
    node *tmp=NULL;
    node *last=NULL;
    while(ps!=NULL){
        //保存原链表中,这个节点指向的下一个节点。
        tmp=ps->next;
        //将当前节点指向上一个节点
        ps->next=last;
        last=ps;       
        ps=tmp;
    }
    start=last;
    return start;
}

node *init(){
    node *start=NULL;
    node *last=NULL;
    node *ps=start;
    int x,num;
    scanf("%d",&num);
    for(int i=0;i<num;i++){
        scanf("%d",&x);
        node *ps=new node;

        //链表赋值
        ps->x=x;
        ps->next=NULL;

        //让上一个指针向它
        if(last==NULL){   
            start=ps;
        }else{
            last->next=ps;
        }
        last=ps;
    }
    return start;
}

int deletelist(node *ps){
    node *tmp;
    while(ps!=NULL){
       tmp=ps;
       ps=ps->next;
       delete tmp;
    }
}

int main(void)
{
    //数据输入
    node * start=init();
    //输出链
    printlist(start);
    //分割线
    printf("\n");
    //翻转
    start= overturn(start);
    //输出链
    printlist(start);
    //回收内存
    deletelist(start);
    start=NULL;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月18日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档