鱼C论坛

 找回密码
 立即注册
查看: 2360|回复: 5

单链表分段逆转,做了两天了能编译成功但是不能实现目标,求大神解答,要哭了

[复制链接]
发表于 2021-3-30 21:40:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>


struct Node {
        int Date;
        struct Node *next;
};



typedef struct Node *List;

List ReadInput();
void PrintList(List L);
void K_Reverse(List L, int K);

List ReadInput()
{
        List head,tail,p;
        head=(List)malloc(sizeof(struct Node));
        head->next=NULL;
        tail=head;
        int i,n;
        scanf("%d",&n);//有多少个数
               
       
        for(i=0;i<n;i++)//输入这几个数
        {
                p=(List)malloc(sizeof(struct Node));
                scanf("%d",&p->Date);
                p->next=NULL;
                tail->next=p;
                tail=p;
        }
        return head;//有人说不用有人说要,我也不知道返回head干嘛
               
               
}
void K_Reserve(List L,int k)
{
                List head,tail,old,temp,cur;
                List p;
                List newone;
                int count,cishu,j;
                head=(struct Node*)malloc(sizeof(struct Node));
                tail=NULL;
                while(p)
                {
                        count++;
                        p=p->next;
                }
                cishu=count/k;
                if(k==1||cishu==0)
                {
                        return;
                }
                else
                {
                        newone=L->next;
                        old=newone->next;
                        tail=L;
                        while(cishu>0)
                        {
                                j=1;
                                cur=newone;
                                while(j<k)
                                {
                                       
                                        newone=head->next;
                                        old=newone->next;
                                        temp=old->next;
                                        head=head->next;
                                        j++;
                                }
                                cur->next=newone;
                                tail->next=old;
                                tail=cur;
                                cishu--;
                                if(old=NULL)
                                {
                                        break;
                                }
                                else
                                {
                                        newone=old;
                                        old=old->next;
                                }
                        }
                }
}

void PrintList(List L)
{
        List p;
        p=L->next;
        while(p)//打印逆置后的数
        {
                printf("%d",&p->Date);
                p=p->next;
        }
}
int main()
{
        List L;
        int k;
       
        L=ReadInput();
        scanf("%d",&k);//每多少个数逆置
        K_Reserve(L,k);
        PrintList(L);
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-30 21:51:02 | 显示全部楼层
       把题目要求和输入输出样例贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-30 23:30:15 | 显示全部楼层
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

函数接口定义:
List Delete( List L, ElementType minD, ElementType maxD );
1
其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */
};
L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较;minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表。

裁判测试程序样例:
#include <stdio.h>

#define MAXSIZE 20
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标0开始存储 */
void PrintList( List L ); /* 裁判实现,细节不表 */
List Delete( List L, ElementType minD, ElementType maxD );

int main()
{
List L;
ElementType minD, maxD;
int i;

L = ReadInput();
scanf("%d %d", &minD, &maxD);
L = Delete( L, minD, maxD );
PrintList( L );

return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
10
4 -8 2 12 1 5 9 3 3 10
0 4
1
2
3
输出样例:
4 -8 12 5 9 10
————————————————
版权声明:本文为CSDN博主「你好我叫椰子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c13868303523/article/details/104216991
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-30 23:30:55 | 显示全部楼层
jackz007 发表于 2021-3-30 21:51
把题目要求和输入输出样例贴出来

给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

函数接口定义:
List Delete( List L, ElementType minD, ElementType maxD );
1
其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */

L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较;minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表。

裁判测试程序样例:
#include <stdio.h>

#define MAXSIZE 20
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标0开始存储 */
void PrintList( List L ); /* 裁判实现,细节不表 */
List Delete( List L, ElementType minD, ElementType maxD );

int main()
{
List L;
ElementType minD, maxD;
int i;

L = ReadInput();
scanf("%d %d", &minD, &maxD);
L = Delete( L, minD, maxD );
PrintList( L );

return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
10
4 -8 2 12 1 5 9 3 3 10
0 4
1
2
3
输出样例:
4 -8 12 5 9 10
————————————————
版权声明:本文为CSDN博主「你好我叫椰子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c13868303523/article/details/104216991
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-30 23:54:17 | 显示全部楼层
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

函数接口定义:
List Delete( List L, ElementType minD, ElementType maxD );
1
其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode {
        ElementType Data[MAXSIZE];
        Position Last; /* 保存线性表中最后一个元素的位置 */
};
1
2
3
4
5
6
L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较;minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表。
————————————————
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-31 00:18:15 | 显示全部楼层
jackz007 发表于 2021-3-30 21:51
把题目要求和输入输出样例贴出来

哥,发出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 22:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表