已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)

对此题目的完整示例可直接运行代码如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode;
LNode* creat(int n){
    LNode *Link;
    LNode *p1,*p2;
    int data;
    Link=(LNode*)malloc(sizeof(LNode));
    p2=Link;
    for(int i=0;i<n;++i){  //一共n个数
        scanf("%d",&data);
        p1=(LNode*)malloc(sizeof(LNode));
        p1->data=data;
        p2->next=p1;
        p2=p1;
    }
    p2->next=NULL;
    return Link;
}

LNode* reverseList(LNode *&A,int X,int Y){   //传过来的链表发生了逆置的变化,所以加个&符合
    LNode *L;
    L=A->next;   //用哨兵指针L指向链表的第一个结点
    LNode *p,*q,*t;
    while(L->next!=NULL){
        if(L->next->data>X){
            p=L;  //p指向了大于X的结点的前一个结点
        //    printf("%d\n",p->data);
            break;
        }
        L=L->next;
    }
    while(L->next!=NULL){
        if(L->next->data>=Y){
            q=L;  //q指向了最后小于Y的结点
        //    printf("%d\n",q->data);
            break;
        }
        L=L->next;
    }
    while(p->next!=q){
        t=p->next;
        p->next=t->next;
        t->next=q->next;
        q->next=t;
    }
    return A;
}

void print(LNode *Link){
    LNode *p;
    p=Link->next;
    while(p!=NULL){
        printf("%d",p->data);
        printf(" ");
        p=p->next;
    }
    printf("\n");
}

void main(){
    LNode *Link=NULL;
    int X,Y;
    int num;
    printf("共创建几个链表结点:");
    scanf("%d",&num);
    printf("请输入链表结点:\n");
    Link=creat(num);
    printf("已创建好的链表结点:");
    print(Link);
    printf("请输入X:");
    scanf("%d",&X);
    printf("请输入Y:");
    scanf("%d",&Y);
    reverseList(Link,X,Y);
    printf("将大于X小于Y的所有结点逆置后的链表结点:");
    print(Link);
}

运行结果如下:

原文地址:https://www.cnblogs.com/tendo/p/9920779.html

时间: 2024-11-08 00:46:17

已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)的相关文章

建立一个带头结点的单向链表,链表中的各结点按结点数据中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序

#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=x;将形参x赋给结点的数

链表 | 将递增有序的两个链表的公共元素合并为新的链表

王道P38T14 主代码: LinkList common_subList(LinkList &A,LinkList &B){ LNode *C=new LNode,*pC=C; C->next=NULL; LNode* pA=A->next,*pB=B->next; while(pA!=NULL && pB!=NULL){ if(pA->data < pB->data){ pA=pA->next; }else if(pA->

【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)

建立源文件List.cpp include "List.h" int main() {     Test();     system("pause");     return 0; } 建立头文件List.h #ifndef __LISH_H__ #define __LISH_H__ #include<iostream> using namespace std; typedef int DataType; struct ListNode {     Li

对象布局已知时 C++ 对象指针的转换时地址调整

在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时,编译器会根据对象布局对相应的指针的值进行调整.不管是 microsoft 的编译器,还是 gcc 编译器都会做这个动作,因为这和 C++ 对象模型有关. 举一个简单的例子,如下代码: #include <stdio.h> class A { public: int x; void foo1()

Luogu-P1027 Car的旅行路线 已知三点确定矩形 + 最短路

传送门:https://www.luogu.org/problemnew/show/P1027 题意: 图中有n个城市,每个城市有4个机场在矩形的四个顶点上.一个城市间的机场可以通过高铁通达,不同城市间要通过飞机.现在问从s到t城市最少需要多少的费用. 思路: 已知矩形的三个顶点,可以用勾股定理确定斜边后,利用平行四边形原理——两对对角顶点的x之和是相同的,y之和也是相同的得到第四个顶点.然后用求最短路的dji即可. #include <algorithm> #include <iter

小猪的数据结构辅助教程——2.1 线性表中的顺序表

小猪的数据结构辅助教程--2.1 线性表中的顺序表 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点: 1.抽象数据类型(ADT)的概念,三要素:数据,数据元素间的关系和数据的操作 2.线性表的特点:按照一条线排列的数据集合,1对1,除了首元和尾元,其他元素都有直接前驱和直接后继 3.牢记线性表的存储结构,要理解并熟悉12个基本操作的逻辑,最好能徒手撕出代码 4.求并集,顺序表的经典例子,必须掌握! 1.抽象的数据类型 简单点说: 抽象:有点像我们面向对象语言中的类的思想,将事物

MSSQL之三 在表中操纵数据

创建了数据库和表之后,下一步是在数据库中存储数据.作为一个数据库开发人员,你将需要修改或删除数据.你可以通过使用Transact-SQL的数据操纵语言(DML)语句来完成这些数据操纵. 本章讨论如何使用DML语句来操纵表中的数据. 重点 ?      插入数据 ?      更新数据 ?      删除表中数据 预习功课 ?        插入部分数据 ?        批量插入数据 ?        在表中更新数据 ?        从表中删除数据 使用DML语句操纵数据 在表中存储数据 表创

数据表中的主键

----还在加班中 再过3个小时就清明节了.我的这块任务以完成咱们聊聊主键 主键 在表的设计中一般都会有一个主键.主键的作用是为了有效的管理表中的数据,主键的存在做为唯一的标识列,主键的存在将表中的每一行数据区分开来,方便有效的检索,更新,删除, 如果没有主键我们执行这些功能时效率将会缓慢. 主键作为标识符,在表中是不具有描述性的(描述性:指有特定的含义 比如 ProjectName:项目名称),主键一般来说是数值类型,并且不用具有描述性而且唯一的字段(比如:社保卡号,手机号码等...) 我们从

C语言整型数据(整数)

整型数据即整数. 整型数据的分类 整型数据的一般分类如下: 基本型:类型说明符为int,在内存中占2个字节. 短整型:类型说明符为short int或short.所占字节和取值范围均与基本型相同. 长整型:类型说明符为long int或long,在内存中占4个字节. 无符号型:类型说明符为unsigned.  无符号型又可与上述三种类型匹配而构成: 无符号基本型:类型说明符为unsigned int或unsigned. 无符号短整型:类型说明符为unsigned short. 无符号长整型:类型