当前位置:网站首页>Reverse linked list - in-place inversion method
Reverse linked list - in-place inversion method
2022-07-30 22:54:00 【code knight】
(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;//将tempA pointer to the first new point
//只要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;
} 边栏推荐
- WSL安装图形界面并通过xrdp/X-Launch访问
- MySQL连接时出现2003错误
- Learning about XML (1)
- MySql 5.7.38 download and installation tutorial, and realize the operation of MySql in Navicat
- MySQL compressed package installation, fool teaching
- 电脑快捷方式图标变白解决方案
- Detailed operator
- 成功解决ImportError: cannot import name ‘_validate_lengths‘
- 使用LVS和Keepalived搭建高可用负载均衡服务器集群
- Jetson AGX Orin 平台关于c240000 I2C总线和GMSL ses地址冲突问题
猜你喜欢

IDEA usage skills

【科研】文献下载神器方式汇总

Jetson AGX Orin 平台关于c240000 I2C总线和GMSL ses地址冲突问题

MySQL compressed package installation, fool teaching

【MySQL】MySQL中对数据库及表的相关操作
![[MySQL] Mysql transaction and authority management](/img/a5/c92e0404c6a970a62595bc7a3b68cd.gif)
[MySQL] Mysql transaction and authority management

二进制序列

matlab标量场作图

MySQL 8.0.29 set and modify the default password

Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
随机推荐
MySql统计函数COUNT详解
Go语学习笔记 - gorm使用 - 事务操作 Web框架Gin(十一)
QT 在父类中添加子类的流程,object tree,
Navicat cannot connect to mysql super detailed processing method
$\text{ARC 145}$
第十九周进度(了解物联网基础知识)
反转链表-就地逆置法
ThinkPHP high imitation blue play cloud network disk system source code / docking easy payment system program
【2022-05-31】JS逆向之易企秀
抽象类和接口(学习笔记)
【云驻共创】HCSD大咖直播–就业指南
IJCAI2022 Tutorial | Spoken Language Comprehension: Recent Advances and New Fields
2022.7.28
Go的Gin框架学习
Rust编译报错:error: linker `cc` not found
[MySQL] Mysql transaction and authority management
#yyds干货盘点# 面试必刷TOP101:判断链表中是否有环
Collapse legacy apps
A detailed explanation: SRv6 Policy model, calculation and drainage
IDEA2021.2安装与配置(持续更新)