当前位置: 首页 > news >正文

数据结构每日一题day14(链表)★★★★★

题目描述:试编写算法将带头结点的单链表就地逆置,所谓“就地”就是空间复杂度为O(1)。

算法思想:

1.初始化:

定义三个指针 prev、curr、next,分别表示前驱节点、当前节点和后继节点。

prev 初始化为 NULL,curr 初始化为头结点的下一个节点(即第一个有效节点)。

2.遍历链表并反转:

遍历链表,每次将 curr->next 指向 prev,实现局部反转。

然后 prev、curr、next 依次后移,继续处理下一个节点。

3.修正头结点指针:

遍历结束后,prev 指向原链表的最后一个节点,即新链表的第一个节点。

将头结点的 next 指向 prev,完成整个链表的逆置。

复杂度分析:

时间复杂度:O(n)

空间复杂度:O(1)

代码实现:

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node, *LinkedList;// 创建链表(尾插法)
LinkedList createList() {LinkedList L = (Node*)malloc(sizeof(Node)), tail = L;int x;while (scanf("%d", &x), x != -1) {tail->next = (Node*)malloc(sizeof(Node));tail = tail->next;tail->data = x;}tail->next = NULL;return L;
}// 就地逆置链表
void reverseList(LinkedList L) {if (L == NULL || L->next == NULL) {return; // 空链表或仅头结点,无需逆置}Node *prev = NULL;Node *curr = L->next; // 第一个有效节点Node *next = NULL;while (curr != NULL) {next = curr->next; // 保存下一个节点curr->next = prev; // 反转当前节点的指针prev = curr;       // prev 后移curr = next;       // curr 后移}L->next = prev; // 头结点指向新的第一个节点
}// 打印链表
void printList(LinkedList L) {for (Node *p = L->next; p; p = p->next) {printf("%d ", p->data);}puts("");
}int main() {LinkedList L = createList();printf("原链表: ");printList(L);reverseList(L);printf("逆置后: ");printList(L);return 0;
}

http://www.xdnf.cn/news/231913.html

相关文章:

  • 读论文笔记-LLaVA:Visual Instruction Tuning
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 网络基础-----C语言经典题目(12)
  • ActiveMQ 可靠性保障:消息确认与重发机制(一)
  • [实战] Petalinux驱动开发以及代码框架解读
  • Mac下安装Python3,并配置环境变量设置为默认
  • 深度学习论文: Describe Anything: Detailed Localized Image and Video Captioning
  • 分组密码算法ShengLooog设计原理详解
  • 如何正确使用日程表
  • 【Java】equals、==、hashcode详解
  • 单片机的各个种类及其详细介绍
  • 复杂度和顺序表(双指针方法)
  • 国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案​
  • 进程地址空间
  • 在柯希霍夫积分法偏移成像中,旅行时计算中振幅和相位信息
  • 兰亭妙微:全流程交互设计和设计前后对比
  • 详细说明c++函数传参常量引用const T传递和值传递的区别
  • 【25软考网工】第四章(4)无线局域网WLAN安全技术、无线个人网WPAN
  • 【Kubernets知识】Secret组件更新大全
  • 设备安全管理:AI赋能的智能守护者
  • 建筑兔零基础python自学记录88|time库文本进度条(下)11
  • x-cmd install | Tewi - 终端里的 Transmission 掌控者,功能全面的 BT 下载管理工具!
  • 适配 AGP8.5,maven 私服发布报错(七)
  • Rust 学习笔记:枚举与模式匹配
  • HTTP 快速解析
  • php+mysql活动报名学生选课产品预定旅游报名系统网站源码
  • Spyglass:官方Hands-on Training(一)
  • 【容器化】Linux环境Docker在线与离线安装手册
  • vscode中设置eslint保存时自动格式化未生效
  • 网易爆米花 1.8.8 | 免费无广告,支持多网盘聚合和智能刮削技术,提供顶级画质和逼真音效的影视管理应用