当前位置:网站首页>反转链表-就地逆置法
反转链表-就地逆置法
2022-07-30 22:45:00 【代码骑士】
(1)思想:就地逆置法和头插法的实现思想类似,唯一的区别在于,头插法是通过建立一个新链表实现的,而就地逆置法则是直接对原链表做修改,从而实现将原链表反转。
(2)实现:在原链表的基础上做修改,需要额外借助 2 个指针(假设分别为 beg 和 end)。
END
代码片段:
//就地逆置法
link * local_reverse(link * head) {
link * beg = NULL;
link * end = NULL;
if (head == NULL || head->next == NULL || head->next->next == NULL) {
return head;
}
beg = head->next;
end = head->next->next;
while (end != NULL) {
//将 end 从链表中摘除
beg->next = end->next;
//将 end 移动至链表头
end->next = head->next;
head->next = end;
//调整 end 的指向,另其指向 beg 后的一个节点,为反转下一个节点做准备
end = beg->next;
}
return head;
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct Link{
int elem;
struct Link* next;
}link;
link * initLink() {
int i = 0;
link * temp = NULL;
link * p = (link*)malloc(sizeof(link));//创建头节点
//首元节点先初始化
p->elem = 0;
p->next = NULL;
temp = p;//头指针指向头节点
for (i = 1; i < 5; i++) {
link *a = (link*)malloc(sizeof(link));
a->elem = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return p;
}
//就地逆置法
link * local_reverse(link * head) {
link * beg = NULL;
link * end = NULL;
if (head == NULL || head->next == NULL || head->next->next == NULL) {
return head;
}
beg = head->next;
end = head->next->next;
while (end != NULL) {
//将 end 从链表中摘除
beg->next = end->next;
//将 end 移动至链表头
end->next = head->next;
head->next = end;
//调整 end 的指向,另其指向 beg 后的一个节点,为反转下一个节点做准备
end = beg->next;
}
return head;
}
void display(link *p) {
link* temp = p->next;//将temp指针重新指向首元结点
//只要temp指针指向的结点的next不是Null,就执行输出语句。
while (temp) {
printf("%d ", temp->elem);
temp = temp->next;
}
printf("\n");
}
int main()
{
link*p=initLink();
printf("原始链表:");
display(p);
printf("反转链表:");
p=local_reverse(p);
display(p);
return 0;
}
输出结果:
若无头结点:
代码片段:
//就地逆置法
link * local_reverse(link * head) {
link * beg = NULL;
link * end = NULL;
if (head == NULL || head->next == NULL) {
return head;
}
beg = head;
end = head->next;
while (end != NULL) {
//将 end 从链表中摘除
beg->next = end->next;
//将 end 移动至链表头
end->next = head;
head = end;
//调整 end 的指向,另其指向 beg 后的一个节点,为反转下一个节点做准备
end = beg->next;
}
return head;
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct Link{
int elem;
struct Link* next;
}link;
link * initLink() {
int i;
link * p = NULL;//创建头指针
link * temp = (link*)malloc(sizeof(link));//创建首元节点
//首元节点先初始化
temp->elem = 1;
temp->next = NULL;
p = temp;//头指针指向首元节点
for (i = 2; i < 5; i++) {
link *a = (link*)malloc(sizeof(link));
a->elem = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return p;
}
//就地逆置法
link * local_reverse(link * head) {
link * beg = NULL;
link * end = NULL;
if (head == NULL || head->next == NULL) {
return head;
}
beg = head;
end = head->next;
while (end != NULL) {
//将 end 从链表中摘除
beg->next = end->next;
//将 end 移动至链表头
end->next = head;
head = end;
//调整 end 的指向,另其指向 beg 后的一个节点,为反转下一个节点做准备
end = beg->next;
}
return head;
}
void display(link *p) {
link* temp = p;//将temp指针重新指向头结点
//只要temp指针指向的结点的next不是Null,就执行输出语句。
while (temp) {
printf("%d ", temp->elem);
temp = temp->next;
}
printf("\n");
}
int main()
{
link*p=initLink();
printf("原始链表:");
display(p);
printf("反转链表:");
p=local_reverse(p);
display(p);
return 0;
}
边栏推荐
- MySQL 8.0.29 decompressed version installation tutorial (valid for personal testing)
- MySQL compressed package installation, fool teaching
- StoneDB 为何敢称业界唯一开源的 MySQL 原生 HTAP 数据库?
- MySql统计函数COUNT详解
- 连号区间数
- Golang 切片删除指定元素的几种方法
- Solve the problem of centos8 MySQL password ERROR 1820 (HY000) You must reset your password using the ALTER USER
- mysql获取当前时间
- 成功解决ModuleNotFoundError: No module named ‘Image‘
- IJCAI2022 Tutorial | Spoken Language Comprehension: Recent Advances and New Fields
猜你喜欢
cmd (command line) to operate or connect to the mysql database, and to create databases and tables
MySQL cursors
MySQL联合查询(多表查询)
Navicat new database
IDEA usage skills
2sk2225代换3A/1500V中文资料【PDF数据手册】
IDEA使用技巧
MySQL 5.7详细下载安装配置教程
MySQL 8.0.29 decompressed version installation tutorial (valid for personal testing)
cookie和session区别
随机推荐
MySQL 5.7详细下载安装配置教程
设备树的引入与体验
ClickHouse to create a database to create a table view dictionary SQL
阿里云视频点播+项目实战
【科研】文献下载神器方式汇总
Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用)
【微信小程序】小程序突破小程序二维码数量限制
The most complete Redis basic + advanced project combat summary notes in history
VS2017 compile Tars test project
Go1.18升级功能 - 模糊测试Fuzz 从零开始Go语言
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
Learning about XML (1)
Detailed operator
Day016 类和对象
MySQL索引常见面试题(2022版)
Day 16 of HCIP
482-静态库、动态库的制作、使用及区别
ML之shap:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用RF随机森林+计算SHAP值单样本力图/依赖关系贡献图可视化实现可解释性之攻略
MySql 5.7.38下载安装教程 ,并实现在Navicat操作MySql
1064 Complete Binary Search Tree