YTU 2991: 链表节点逆置(线性表)
2991: 链表节点逆置(线性表)
时间限制: 1 Sec 内存限制: 128 MB
提交: 14 解决: 6
题目描述
设计一个算法,将一个带头节点的数据域依次为a1,a2,…,an(n>=3)的单链表的所有节点逆置,即第一个节点的数据域变为an,……,最后一个节点的数据域变为a1,请尽量采用较优算法,时间复杂度为O(n)最佳!
线性表的定义为
typedef struct Node
{
ElemType data;
struct Node *next;
} SqList;
需编写的算法为
SqList *Deal(SqList *p);
注意:只需提交你所编写的算法
输入
输入的第一行包含一个整数,代表单链表的长度。接下来的一行是链表每个节点的数据域的值。
输出
输出包含一行,即逆置节点后链表的每个节点的数值。
样例输入
10
1 2 3 4 5 6 7 8 9 10
样例输出
10 9 8 7 6 5 4 3 2 1
提示
迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} SqList;
SqList *Init(int n)
{
if(n<3)exit(-1);
SqList *head=NULL,*p1,*p2;
head=(SqList*)malloc(sizeof(SqList));
p1=p2=(SqList*)malloc(sizeof(SqList));
for(int i=0; i<n; i++)
{
if(i==0)head->next=p1;
else p2->next=p1;
scanf("%d",&p1->data);
p2=p1;
p1=(SqList*)malloc(sizeof(SqList));
}
p2->next=NULL;
return head;
}
void Print(SqList *p)
{
p=p->next;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
SqList *Deal(SqList *p)
{
SqList *a=p->next,*b=p->next->next,*c=p->next->next->next,*head=p;
while(true)
{
if(a==p->next)a->next=NULL;
b->next=a;
if(c->next==NULL)
{
c->next=b;
break;
}
a=b,b=c,c=c->next;
}
head->next=c;
return head;
}
int main()
{
int n;
SqList *head=NULL;
scanf("%d",&n);
head=Init(n);
head=Deal(head);
Print(head);
return 0;
}
YTU 2991: 链表节点逆置(线性表)的更多相关文章
- YTU 2990: 链表的基本运算(线性表)
2990: 链表的基本运算(线性表) 时间限制: 1 Sec 内存限制: 128 MB 提交: 1 解决: 1 题目描述 编写一个程序,实现链表的各种基本运算(假设顺序表的元素类型为char),主 ...
- C语言实现单链表的逆置
单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决. 首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直 ...
- PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)
1074 Reversing Linked List (25 分) Given a constant K and a singly linked list L, you are supposed ...
- SDUT-2118_数据结构实验之链表三:链表的逆置
数据结构实验之链表三:链表的逆置 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入多个整数,以-1作为结束标志,顺序 ...
- SDUT OJ 数据结构实验之链表三:链表的逆置
数据结构实验之链表三:链表的逆置 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...
- 如何在时间复杂度为O(n)空间复杂度为O(1)的情况下完成链表的逆置
问题如题目,首先分析,链表的反转的空间复杂度如果为常数级,那么不可能完成从堆中申请数据来完成链表的反转工作,所以问题就转化为了如何将原链表修改/拆解为逆置的链表: 函数形式假定如下 void Inv ...
- Leetcode:Swap Nodes in Pairs 单链表相邻两节点逆置
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- 数据结构实验之链表三:链表的逆置(SDUT 2118)
题目链接 #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; ...
- 线性表——顺序表的实现与讲解(C++描述)
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这 ...
随机推荐
- G面经prepare: Reorder String to make duplicates not consecutive
字符串重新排列,让里面不能有相同字母在一起.比如aaabbb非法的,要让它变成ababab.给一种即可 Greedy: 跟FB面经Prepare task Schedule II很像,记录每个char ...
- java-语法
JAVA语法 1.标识符 1.定义:对各种变量.方法.类等进行命名的字符序列 2.规则:他的组成由字母.数字.$,数字不能出现在开始,不能和关键字重复,区分大小写 2.数据类型 1.分类 1基本数据类 ...
- Google 推出的 Java 编码规范(转)
原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http://www.dahuatu.com/1225/988516.html 原文地址:http: ...
- Java日志管理方法(转载)
原文地址:http://www.cnblogs.com/leocook/p/log_java.html java开发中常见的几种日志管理方案有以下4种: 1. Commons-logging + lo ...
- MFC架构
MFC的六大关键技术: 1)MFC程序的初始化过程 2)消息映射 3)运行时类型识别(RTTI) 4)动态创建 5)永久保存 6)消息传递 一.MFC的初始化过程: MFC的架构组成: 1.要有CWi ...
- 二分多重匹配(HDU5093)
Battle ships Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- JQuery权限管理
<title></title> <script src="JS/jquery-1.7.1.js"></script> <scr ...
- 20145207 《Java程序设计》第5周学习总结
前言:先聊两句,上午电路实习,刚开始没多久就让电烙铁烫了,倒霉催的~晚上来这里接着弄代码,透心凉心飞扬~ 教材学习内容总结 一.异常处理 1.语法与继承结构 使用try.catch: Java中所有错 ...
- css3文字与字体
---恢复内容开始--- 1.text-overflow(用来设置是否使用省略标记)必须和white-space:nowrap 同时使用white-space:nowrap(强制文本在一行显示) wo ...
- demo16Toast
/Users/alamps/AndroidStudioProjects/demo16Toast/demo16Toast/src/main/res/layout/activity_main.xml &l ...