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: 链表节点逆置(线性表)的更多相关文章

  1. YTU 2990: 链表的基本运算(线性表)

    2990: 链表的基本运算(线性表) 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 题目描述 编写一个程序,实现链表的各种基本运算(假设顺序表的元素类型为char),主 ...

  2. C语言实现单链表的逆置

          单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决.       首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直 ...

  3. 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 ...

  4. SDUT-2118_数据结构实验之链表三:链表的逆置

    数据结构实验之链表三:链表的逆置 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入多个整数,以-1作为结束标志,顺序 ...

  5. SDUT OJ 数据结构实验之链表三:链表的逆置

    数据结构实验之链表三:链表的逆置 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...

  6. 如何在时间复杂度为O(n)空间复杂度为O(1)的情况下完成链表的逆置

    问题如题目,首先分析,链表的反转的空间复杂度如果为常数级,那么不可能完成从堆中申请数据来完成链表的反转工作,所以问题就转化为了如何将原链表修改/拆解为逆置的链表: 函数形式假定如下  void Inv ...

  7. Leetcode:Swap Nodes in Pairs 单链表相邻两节点逆置

    Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...

  8. 数据结构实验之链表三:链表的逆置(SDUT 2118)

    题目链接 #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; ...

  9. 线性表——顺序表的实现与讲解(C++描述)

    线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这 ...

随机推荐

  1. 微信成为开发者C#代码

    第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!今天咱就和大家探讨下如何让自己成为开发者!那么怎么才能成为开发者呢? 首先给大家一个微信的截图,看到这个截图,是不是有想去尝试的冲动?

  2. git打tag 三步骤

    git status git tag publish/1.0.0 git push origin publish/1.0.0

  3. 连接sql server数据库的两种方式

    class DB     { private static SqlConnection conn; public static SqlConnection getConn() { //conn = n ...

  4. GTA项目 一, 包装外部WebService

    外部WebService返回的是xml太重了. 而JSON是web的新标准.所以要包装一下. 使用NewtonSoft.JSON的dll里面的JsonConvert.SerializeXmlNode方 ...

  5. smarty -- foreach用法

    {foreach},{foreachelse} 用于像访问序数数组一样访问关联数组 {foreach},{foreachelse} {foreach} is used to loop over an  ...

  6. 转:python webdriver 环境搭建

    第一节 环境搭建准备工具如下:-------------------------------------------------------------下载 python[python 开发环境]ht ...

  7. extjs中的下载并对文件重命名功能的实现

    在小白的学习extjs的过程中,如果需要了解多文件的上传功能,也可以查看小白的上篇随笔,希望给大家帮助.http://www.cnblogs.com/wangqc/p/extjsFileUpload. ...

  8. javascript 内置对象

    什么是对象 javascript中的所有事物都是对象:字符串  数组  数值  函数... 每个对象都带有属性和方法 javascript允许自定义对象      自定义对象: 定义并创建对象实例 使 ...

  9. linux第10天 msg消息队列

    cat /proc/sys/kernel/msgmax最大消息长度限制 cat /proc/sys/kernel/msgmnb消息队列总的字节数 cat /proc/sys/kernel/msgmni ...

  10. MyEclipse启动失败

    日志的一部分: !SESSION 2014-09-24 11:47:03.156 -----------------------------------------------eclipse.buil ...