C++ ——实现链表反转逆序
在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++ ——实现链表反转逆序相关推荐
- 【C++】链表反转逆序|建立、删除、修改、插入|linux内核链表与普通链表
目录 C++实现链表逆序 链表的建立.删除.修改.插入 linux内核链表与普通链表 C++实现链表逆序 实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listn ...
- 【list】C++ ——实现链表反转逆序
实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listnode {int data;struct listnode* next; }listnode , *lis ...
- C++ 单向链表 —— 初始化、插入、返回第一个节点、删除、查找、长度、打印、反转(逆序)
单向链表的概念: 如果"一个节点"将指向"另一个节点的指针"作为数据成员,那么多个这样的节点可以连起来,只用一个变量就能够访问整个节点序列,我们称之为链表.如果 ...
- 大厂面试算法系列-如何实现链表的逆序(二)-递归法
导语 接着上次的内容,上次博客中展示了原地进行单链表的逆序操作,当然除了原地逆序还可以通过递归的方式进行调用操作.下面就来看看通过递归的方式如何进行单链表的逆序操作. 递归法逆序链表 假定原来 ...
- 大厂面试算法系列-如何实现链表的逆序(一)-原地逆序
题目描述 给定一个带有头节点的单向列表,将这个链表进行逆序.例如head->1->3->4->2,逆序之后变成head->2->4->3->1 题目 ...
- 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序
题目介绍 来源:腾讯笔试 难度系数:★★★☆☆ 考察频率:★★★★☆ 题目描述: 给定一个带头结点的单链表,请将其逆序 ...
- 整个链表的逆序实现及部分链表的逆序实现(C++)
1 整个链表的逆序 1.1思路 1. 传入一个链表的头节点 2. 生成一个新的空结点(pNew),后续作为链表的结点备份 3. 用一个指针(pNext)指向当前头节点的下一个节点,作为记录保存 4. ...
- C语言单向链表的逆序输出
最近在学习链表,看到书上说可以采取每次在链表头部插入新增节点的方法,将链表逆序,也就是建立的链表节点内容与数据的输入顺序相反.我便来了兴趣,想着试试看,结果没搞懂,于是开始百度.看了几遍博客后终于是明 ...
- c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
最新文章
- 柚子小姐,Happy Birthday
- 悬挑脚手架卸载钢丝绳要求_100m的悬挑脚手架技术交底
- RabbitMQ(二):mandatory标志的作用
- struts实战--文件下载
- Hive学习之路 (一)Hive初识
- win7旗舰版安装不了python_怎样在Win7 64位旗舰版安装Python+Eclipse开发环境
- session很快失效_深夜,我偷听到程序员要对session下手...
- java dozer map转对象_对象转换利器之Dozer
- 对话张璐:硅谷VC没有因区块链失眠,AI应用进入产业变现阶段
- Thread.sleep(0)的意义
- Hinton的GLOM模型与千脑理论有何本质不同?
- 苹果6s最大屏幕尺寸_iPhone SE /iPhone 6s /5s对比图赏与屏幕报告
- python 函数嵌套和嵌套调用
- 考研复试-数据库知识点速记
- maven-replacer-plugin 静态资源打包方案js css
- 计算机无法连接网络错误651,Win7宽带连接错误651的原因和解决方法
- linux磁盘分区什么意思,linux 磁盘分区详解
- ios 三种随机数方法
- Maven本地仓库安装Jar的方法
- 调制解调器以及ADSL拨号上网