在B站上学习C++服务器开发,第一节课结束的时候老师布置了一个小作业——实现链表逆序

好久没有接触C++了,大一的时候学过,到了大三忘的差不多了,所以想重新学学。接触过Java和python之后回过来看C++,感觉c++好麻烦。


实现链表逆序,首先要有一个链表,下面是链表的结构体:

typedef struct listnode {int data;struct listnode* next;
}listnode , *list;

实现思路:

1. 若链表为空或只有一个元素,则直接返回;

2. 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;

3. 重复2,直到q==NULL

4. 调整链表头和链表尾

示例:以逆序1->2->3->4为例,图示如下


完整实现代码:

#include<iostream>
using namespace std;typedef struct listnode {int data;struct listnode* next;
}listnode , *list;void print(list head);
list reverse(list head);
list fill(list head); //默认用1-10填充链表int main()
{//初始化链表头节点listnode* head;head = (listnode*)malloc(sizeof(listnode));head->next = NULL;head->data = -1;list linklist = fill(head);print(head);reverse(head);print(head);getchar();return 0;
}list reverse(list head)
{if (head->next == NULL || head->next->next == NULL){return head;   /*链表为空或只有一个元素则直接返回*/}list t = NULL;list p = head->next;list q = head->next->next;while (q != NULL){t = q->next;q->next = p;p = q;q = t;}/*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/head->next->next = NULL;  /*设置链表尾*/head->next = p;           /*调整链表头*/return head;
}list fill(list head)
{   listnode *p, *q;p = head;for (int i = 0; i < 10; i++) {q = (listnode*)malloc(sizeof(listnode));q->data = i + 1;q->next = NULL;p->next = q;p = q;}return head;
}void print(list head)
{list p;p = head->next;while(p != NULL){cout << p->data << " ";p = p->next;}cout << endl;
}

执行结果:

C++ ——实现链表反转逆序相关推荐

  1. 【C++】链表反转逆序|建立、删除、修改、插入|linux内核链表与普通链表

    目录 C++实现链表逆序 链表的建立.删除.修改.插入 linux内核链表与普通链表 C++实现链表逆序 实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listn ...

  2. 【list】C++ ——实现链表反转逆序

    实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listnode {int data;struct listnode* next; }listnode , *lis ...

  3. C++ 单向链表 —— 初始化、插入、返回第一个节点、删除、查找、长度、打印、反转(逆序)

    单向链表的概念: 如果"一个节点"将指向"另一个节点的指针"作为数据成员,那么多个这样的节点可以连起来,只用一个变量就能够访问整个节点序列,我们称之为链表.如果 ...

  4. 大厂面试算法系列-如何实现链表的逆序(二)-递归法

    导语   接着上次的内容,上次博客中展示了原地进行单链表的逆序操作,当然除了原地逆序还可以通过递归的方式进行调用操作.下面就来看看通过递归的方式如何进行单链表的逆序操作. 递归法逆序链表   假定原来 ...

  5. 大厂面试算法系列-如何实现链表的逆序(一)-原地逆序

    题目描述   给定一个带有头节点的单向列表,将这个链表进行逆序.例如head->1->3->4->2,逆序之后变成head->2->4->3->1 题目 ...

  6. 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序

    题目介绍 来源:腾讯笔试                         难度系数:★★★☆☆                  考察频率:★★★★☆ 题目描述: 给定一个带头结点的单链表,请将其逆序 ...

  7. 整个链表的逆序实现及部分链表的逆序实现(C++)

    1 整个链表的逆序 1.1思路 1. 传入一个链表的头节点 2. 生成一个新的空结点(pNew),后续作为链表的结点备份 3. 用一个指针(pNext)指向当前头节点的下一个节点,作为记录保存 4. ...

  8. C语言单向链表的逆序输出

    最近在学习链表,看到书上说可以采取每次在链表头部插入新增节点的方法,将链表逆序,也就是建立的链表节点内容与数据的输入顺序相反.我便来了兴趣,想着试试看,结果没搞懂,于是开始百度.看了几遍博客后终于是明 ...

  9. c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

最新文章

  1. 柚子小姐,Happy Birthday
  2. 悬挑脚手架卸载钢丝绳要求_100m的悬挑脚手架技术交底
  3. RabbitMQ(二):mandatory标志的作用
  4. struts实战--文件下载
  5. Hive学习之路 (一)Hive初识
  6. win7旗舰版安装不了python_怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
  7. session很快失效_深夜,我偷听到程序员要对session下手...
  8. java dozer map转对象_对象转换利器之Dozer
  9. 对话张璐:硅谷VC没有因区块链失眠,AI应用进入产业变现阶段
  10. Thread.sleep(0)的意义
  11. Hinton的GLOM模型与千脑理论有何本质不同?
  12. 苹果6s最大屏幕尺寸_iPhone SE /iPhone 6s /5s对比图赏与屏幕报告
  13. python 函数嵌套和嵌套调用
  14. 考研复试-数据库知识点速记
  15. maven-replacer-plugin 静态资源打包方案js css
  16. 计算机无法连接网络错误651,Win7宽带连接错误651的原因和解决方法
  17. linux磁盘分区什么意思,linux 磁盘分区详解
  18. ios 三种随机数方法
  19. Maven本地仓库安装Jar的方法
  20. 调制解调器以及ADSL拨号上网

热门文章

  1. java 日历签到功能_基于jquery实现日历签到功能
  2. 三分钟了解服务架构演进及优缺点
  3. Win11便签打不开怎么办?Win11便笺停止工作解决方法
  4. Android高级图片滚动控件,编写3D版的图片轮播器
  5. IHE Gazelle
  6. 百度财报:AI要当扛把子
  7. 小新pro13锐龙版本 ,开启vt,svm,开启虚拟机
  8. 基于MODIS数据的秸秆焚烧遥感监测
  9. 韦伯/瑞利/指数分布
  10. 为何说主场在京东?从京东11.11互动营销数据可窥一斑