当前位置:网站首页>8581 线性链表逆置
8581 线性链表逆置
2022-08-02 14:02:00 【weixin_50862344】
题干
8581 线性链表逆置
时间限制:1000MS 代码长度限制:10KB
提交次数:2811 通过次数:2032
题型: 编程题 语言: G++;GCC
Description
线性链表的基本操作如下:
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
Status ListInsert_L(LinkList &L, int i, ElemType e) { // 算法2.9
// 在带头结点的单链线性表L的第i个元素之前插入元素e
LinkList p,s;
p = L;
int j = 0;
while (p && j < i-1) { // 寻找第i-1个结点
p = p->next;
++j;
}
if (!p || j > i-1) return ERROR; // i小于1或者大于表长
s = (LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data = e; s->next = p->next; // 插入L中
p->next = s;
return OK;
} // LinstInsert_L
Status ListDelete_L(LinkList &L, int i, ElemType &e) { // 算法2.10
// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkList p,q;
p = L;
int j = 0;
while (p->next && j < i-1) { // 寻找第i个结点,并令p指向其前趋
p = p->next;
++j;
}
if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并释放结点
e = q->data;
free(q);
return OK;
} // ListDelete_L
设有一线性表A=(a0,a1,…, ai,…an-1),其逆线性表定义为A’=( an-1,…, ai,…,a1, a0),设计一个算法,将线性表逆置,要求线性表仍占用原线性表的空间。
输入格式
第一行:输入n,表示单链表的元素个数
第二行:输入单链表的各元素,用空格分开
输出格式
第一行:输出单链表逆置前的元素列表
第二行:输出单链表逆置后的元素列表
输入样例
8
32 97 54 65 35 84 61 75
输出样例
The List is:32 97 54 65 35 84 61 75
The turned List is:75 61 84 35 65 54 97 32
代码实现
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef int Status;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
Status ListInsert_L(LinkList &L, int i, ElemType e) {
// 算法2.9
// 在带头结点的单链线性表L的第i个元素之前插入元素e
LinkList p,s;
p = L;
int j = 0;
while (p && j < i-1) {
// 寻找第i-1个结点
p = p->next;
++j;
}
if (!p || j > i-1) return ERROR; // i小于1或者大于表长
s = (LinkList)malloc(sizeof(LNode)); // 生成新结点
s->data = e; s->next = p->next; // 插入L中
p->next = s;
return OK;
} // LinstInsert_L
Status ListDelete_L(LinkList &L, int i, ElemType &e) {
// 算法2.10
// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkList p,q;
p = L;
int j = 0;
while (p->next && j < i-1) {
// 寻找第i个结点,并令p指向其前趋
p = p->next;
++j;
}
if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并释放结点
e = q->data;
free(q);
return OK;
} // ListDelete_L
//设有一线性表A=(a0,a1,..., ai,...an-1),其逆线性表定义为A'=( an-1,..., ai,...,a1, a0),设计一个算法,将线性表逆置,要求线性表仍占用原线性表的空间。
int CreateLink_L(LinkList &L,int n){
// 创建含有n个元素的单链表
LinkList p,q;
int i;
ElemType e;
L = new LNode;
L->next = NULL; // 先建立一个带头结点的单链表
q = new LNode;
q = L;//作为指示指针,保证表头指针L无需改变
for (i=0; i<n; i++) {
scanf("%d", &e);
p = new LNode; // 生成新结点
p->data=e;
q->next=p;
q=q->next;
p->next=NULL;
}
return OK;
}
int LoadLink_L(LinkList &L){
// 单链表遍历
LinkList p = L->next;
if(p->next==NULL)printf("The List is empty!"); // 请填空
else
{
while(p) // 请填空
{
printf("%d ",p->data);
p=p->next; // 请填空
}
}
printf("\n");
return OK;
}
LinkList ListReverse(LinkList &L)//链表逆置
{
LinkList p,cur;
if(L==NULL) return NULL;
cur=L->next;
while(cur->next)
{
p=cur->next;//p指向cur的下一个结点
cur->next=p->next;//cur的指针域指向p的下一个结点
p->next=L->next;//p的指针域指向L的下一个结点
L->next=p;//L的指针域指向结点*p
}
return L;
}
int main()
{
int n;
LinkList T;
scanf("%d",&n);
CreateLink_L(T,n);
printf("The List is:");
LoadLink_L(T);
ListReverse(T);
printf("The turned List is:");
LoadLink_L(T);
}
不知道该起啥名的标题

p=cur->next;//p指向cur的下一个结点
cur->next=p->next;//cur的指针域指向p的下一个结点
这个地方的第二行不可以被替换为p=p->next;
表示含义不同,最终逆置链表不会输出
- 关于思路
我真心建议看一下下面这个链接
(坦白了,我就是抄的)
主要思路:是从第二个节点开始逐一将当前结点移到首位
核心算法:p->next=L->next;
其他都是围绕着核心算法做的next域的修改等操作
实际上,cur一直指向最初的第一个节点
https://blog.csdn.net/BitcoinR/article/details/108314019
边栏推荐
- C# 编译错误:Compiler Error CS1044
- Audio processing: floating point data stream to PCM file
- Configure zabbix auto-discovery and auto-registration.
- The most complete ever!A collection of 47 common terms of "digital transformation", read it in seconds~
- 第六单元 初识ORM
- 第七单元 ORM表关系及操作
- RKMPP API安装使用总结
- deal!It's July 30th!
- 玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
- 保姆级教程:写出自己的移动应用和小程序(篇三)
猜你喜欢

微信小程序-最近动态滚动实现

ZABBIX配置邮件报警和微信报警

海明校验码纠错设计原理

Flask项目的完整创建 七牛云与容联云

stack && queue

【Tensorflow】AttributeError: '_TfDeviceCaptureOp' object has no attribute '_set_device_from_string'

此次519暴跌的几点感触 2021-05-21

The future of financial services will never stop, and the bull market will continue 2021-05-28

网络安全第六次作业

RHCE第一天作业
随机推荐
线代:已知一个特征向量快速求另外两个与之正交的特征向量
rhce第三天作业
第三单元 视图层
What are the file encryption software?Keep your files safe
Flask框架
What is the difference between web testing and app testing?
网络安全第五次作业
The bad policy has no long-term impact on the market, and the bull market will continue 2021-05-19
vim复制粘贴_vim如何复制粘贴
史上最全!47个“数字化转型”常见术语合集,看完秒懂~
Interviewer: Can you talk about optimistic locking and pessimistic locking?
Audio processing: floating point data stream to PCM file
els strip collision deformation judgment
redis延时队列
Geoffery Hinton:深度学习的下一个大事件
MySQL数据库语法格式
海明校验码纠错设计原理
Haystack的介绍和使用
政策利空对行情没有长期影响,牛市仍将继续 2021-05-19
网络安全第六次作业