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

6 Reverse Linked List

分数 20

作者 陈越

单位 浙江大学

Write a nonrecursive procedure to reverse a singly linked list in O(N) time using constant extra space.

Format of functions:

List Reverse( List L );

where List is defined as the following:

typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node {ElementType Element;Position Next;
};

The function Reverse is supposed to return the reverse linked list of L, with a dummy header.

Sample program of judge:

#include <stdio.h>
#include <stdlib.h>typedef int ElementType;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node {ElementType Element;Position Next;
};List Read(); /* details omitted */
void Print( List L ); /* details omitted */
List Reverse( List L );int main()
{List L1, L2;L1 = Read();L2 = Reverse(L1);Print(L1);Print(L2);return 0;
}/* Your function will be put here */

Sample Input:

5
1 3 4 5 2

Sample Output:

2 5 4 3 1
2 5 4 3 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

解题思路如下:

1.首先判断该单链表是否为空链表若为空则直接返回改链表

2.若不为空,则创建两个指针beg和end,一个指向原单链表的第一个数据结点,一个指向第一个数据结点的下一个结点。

3.接下来进行四个步骤的循环:

第一步:连(防止断链找不到下一个结点),将beg的Next域指针指向end的Next域指针所指向的结点,那么beg的Next域指向end结点的链将断掉。

第二步:调,将end的Next域指向L的头结点所指向的结点。

第三步:接,将新的第一个数据节点的地址保存在原来的头结点中

第四步:移,将end指针移动到beg的Next指针域指向的结点

具体代码如下:

List Reverse(List L) {if(L == NULL || L ->Next == NULL){return L;//如果链表为空则直接返回该链表}List beg,end;//创建两个指针beg = L->Next;//一个指向单链表的头结点end = beg->Next;//一个指向头结点里Next域所指向的结点while(end != NULL){//循环条件为end不为空beg ->Next = end->Next;//第一步链接end->Next = L->Next;//第二步断链、调转L->Next = end;//第三步改变链接新的数据结点end = beg->Next;//第四步移动指针到新的结点}return L;
}

http://www.lryc.cn/news/336248.html

相关文章:

  • 【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)
  • 2024免费Mac电脑用户的系统清理和优化软件CleanMyMac
  • Centos7源码方式安装Elasticsearch 7.10.2单机版
  • mysql的安装和部署
  • 大数据基本名词
  • 网站网页客服、微信公众号客服、H5客服、开源源码与高效部署的完美结合
  • 1、Qt UI控件 -- qucsdk
  • Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑
  • 如何在Ubuntu系统使用docker部署DbGate容器并发布至公网可访问
  • 解决 VSCode 编辑器点击【在集成终端中打开】出现新的弹框
  • 从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
  • Ant Design Vue 表单验证手机号的正则
  • [dvwa] CSRF
  • 只为兴趣,2024年你该学什么编程?
  • HAL STM32 定时器PWM DMA输出方式
  • 博客部署004-centos安装mysql及redis
  • Hive 之 UDF 运用(包会的)
  • 数据驱动目标:如何通过OKR实现企业数字化转型
  • 软考120-上午题-【软件工程】-软件开发模型02
  • C语言面试题之返回倒数第 k 个节点
  • 力扣爆刷第116天之CodeTop100五连刷66-70
  • B站广告推广操作教程及费用?
  • Linux操作系统之docker基础
  • 35-3 使用dnslog探测fastjson漏洞
  • Qt——示波器/图表 QCustomPlot
  • 《图解Vue3.0》- 调试
  • 【PyQt5篇】和子线程进行通信
  • JavaScript数组操作方法全录
  • 8.排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序)的模拟实现
  • (详解)python调用另一个.py文件中的类和函数或直接运行另一个.py文件