对此题目的完整示例可直接运行代码如下:
#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