| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2221 人关注过本帖
标题:c语言链表逆转,程序运行不出结果
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:30 回复次数:9 
c语言链表逆转,程序运行不出结果
检查了好多遍就是找不到错在哪里?

程序代码:
#include "stdio.h"
#include "stdlib.h"

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node 
{
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;


List Read(  )
{
        int i,a;
        int N;            //链表结点个数
        List p,q,head;
        scanf("%d",&N);

        head=NULL;
        p=(struct Node*)malloc(sizeof(struct Node));

        for(i=1;i<=N;i++)
        {
            scanf("%d",&a);
            p->Data=a;
            p->Next=NULL;

            if(head==NULL)
                head=p;
            else
                q->Next=p;    
            
            q=p;
        }
        return head;
}


void Print(List head)
{
    struct Node *t;
    t=head;
    while(t!=NULL)
    {
        printf("%d",t->Data);
        t=t->Next;
    }

}


List Reverse(List  head )
{
    List s,t,p;
    t=NULL;
    p=head;

    while(p!=NULL)//当原链表头指针不指向空时
    {
        s=(struct Node*)malloc(sizeof(struct Node));
        /*逆转之后,原链表的头结点就是新链表的尾结点                  
        如果不是第一个结点,则本次产生的新结点是上次结点的前一个*/  

        s->Data=p->Data;
        s->Next=t;
        t=s;

        p=p->Next;
    }    

    return s;
}



int main()
{    
    List L1, L2;
    L1 = Read();    //返回链表头指针
    L2 = Reverse(L1);
    Print(L1);
    Print(L2);
    return 0;
}
搜索更多相关主题的帖子: c语言 
2015-09-17 16:41
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-09-17 16:46
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:30 
程序代码:
#include "stdio.h"
#include "stdlib.h"
typedef int ElementType;
typedef struct Node 
{
    ElementType Data;
    struct Node *Next;
}PtrToNode;
typedef PtrToNode List;
PtrToNode *Read()
{
        int i,a;
        int N;            //链表结点个数
        PtrToNode *p,*q,*head;
        printf("输入链表结点个数:");
        scanf("%d",&N);

        head=(PtrToNode*)malloc(sizeof(PtrToNode));
        p=head; 

        for(i=1;i<=N;i++)
        {
            printf("输入结点%d的数据:\t",i);
            scanf("%d",&a);
            q=(PtrToNode*)malloc(sizeof(PtrToNode));
            q->Data=a;
            q->Next=NULL;
            p->Next=q;
            p=q;
        }
        p=NULL;
        return head;
}
void Print(PtrToNode* head)
{
    PtrToNode *t;
    t=head->Next;
    while(t!=NULL)
    {
        printf("%d\t",t->Data);
        t=t->Next;
    }
    printf("\n");
}
PtrToNode* Reverse(PtrToNode*  head )
{
    PtrToNode *p,*q,*r;
    p=head->Next;
    q=p->Next;
    r=q->Next;            
    p->Next=NULL;
    while(r->Next!=NULL)                                                                                
    {
        q->Next=p;
        p=q;q=r;r=r->Next; 
    }
    q->Next=p;
    r->Next=q;
    head->Next=r;
    return head;
}
int main()
{    
    PtrToNode *L1, *L2;
    L1 = Read();    //返回链表头指针
    Print(L1);
    L2 = Reverse(L1);
    Print(L2);
    return 0;
}

什么电影能否说一下呢?

剑栈风樯各苦辛,别时冰雪到时春
2015-09-17 17:31
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 3楼 林月儿
typedef struct Node *PtrToNode;
struct Node
{
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

这里用List,struct Node *,PtrToNode定义的变量类型都是struct Node *吧?我这样p=(struct Node*)malloc(sizeof(struct Node));这样List Read(  ),写错了吗?裁判测试程序样例里就是这样写的啊,我也觉得语法应该没错。
裁判测试程序样例:
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */

然后对于月儿老师写的
typedef struct Node
{
    ElementType Data;
    struct Node *Next;
}PtrToNode;
typedef PtrToNode List;

PtrToNode *Read()这句我不明白啊,PtrToNode表示struct Node型数据吧,如果要表示struct Node *类型数据不应该是*PtrToNode,为什么是这样写的PtrToNode *Read(),月儿老师写的代码里都是这样写的呢,我不明白啊。三三代码运行无误

这是电视剧,名字叫FOR YOU,网上找不到的,女演员叫中山美穗。我最喜欢的电影《情书》就是她主演的。pps有视频。
2015-09-17 18:57
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 3楼 林月儿
我又思考了下PtrToNode *Read()这样写是表示struct Node *?,这样返回值就是struct Node *类型了吧,可我觉得我写的也没错啊
2015-09-17 19:00
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 5楼 令狐少侠56
没有说你写错啦,个人习惯啦

剑栈风樯各苦辛,别时冰雪到时春
2015-09-17 19:17
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用令狐少侠56在2015-9-17 18:57:33的发言:

typedef struct Node *PtrToNode;
struct Node
{
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

这里用List,struct Node *,PtrToNode定义的变量类型都是struct Node *吧?我这样p=(struct Node*)malloc(sizeof(struct Node));这样List Read(  ),写错了吗?裁判测试程序样例里就是这样写的啊,我也觉得语法应该没错。
裁判测试程序样例:
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */

然后对于月儿老师写的
typedef struct Node
{
    ElementType Data;
    struct Node *Next;
}PtrToNode;
typedef PtrToNode List;

PtrToNode *Read()这句我不明白啊,PtrToNode表示struct Node型数据吧,如果要表示struct Node *类型数据不应该是*PtrToNode,为什么是这样写的PtrToNode *Read(),月儿老师写的代码里都是这样写的呢,我不明白啊。三三代码运行无误

这是电视剧,名字叫FOR YOU,网上找不到的,女演员叫中山美穗。我最喜欢的电影《情书》就是她主演的。pps有视频。


少侠不要叫我老师,代码无常态,算法才是关键。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-17 19:18
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 3楼 林月儿
总算找到错在哪里了,Read函数中的p=(struct Node*)malloc(sizeof(struct Node));竟然写到for循环外面去了。
谢谢林姑娘指点,30分都给你了。
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-09-17 20:18
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用令狐少侠56在2015-9-17 20:18:54的发言:

总算找到错在哪里了,Read函数中的p=(struct Node*)malloc(sizeof(struct Node));竟然写到for循环外面去了。
谢谢林姑娘指点,30分都给你了。


图配的不错,让我有种拿到30块钱的感觉

剑栈风樯各苦辛,别时冰雪到时春
2015-09-17 20:42
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 9楼 林月儿
这一瞬间的安静模样让我无法忘记。。。。
2015-09-17 23:14
快速回复:c语言链表逆转,程序运行不出结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069832 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved