| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:初次写链表程序,求帮忙检查错误
只看楼主 加入收藏
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
结帖率:84.62%
收藏
 问题点数:0 回复次数:5 
初次写链表程序,求帮忙检查错误
新建一个链表,然后将链表逆序输出,编译连接无错,但是无法得到正确结果
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct data)
struct data
{
    int num;
    struct data *next;
};
struct data * creat(void);
struct data * sort(struct data *);
void print(struct data *);
void main()
{
    struct data * head;
    printf("请输入数据(输入结束请按0):\n");
    head=creat();
    printf("您输入的数据为:\n");
    print(head);
    head=sort(head);
    printf("逆序后的数据为:\n");
    print(head);
}

struct data * creat(void)
{
    int n=0;
    struct data * Head,*p1,*p2;
    p1=p2=(struct data *)malloc(LEN);
    scanf("%d",&p1->num);
    Head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            Head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=(struct data *)malloc(LEN);
        scanf("%d",&p1->num);
    }
    p2->next=NULL;
    return Head;
}

struct data * sort(struct data * Head)
{
    struct data *p,*NewHead=NULL;
    p=NewHead=Head;
    while(NewHead->next!=NULL)
    {
        NewHead=NewHead->next;
        NewHead->next=p;
        p=NewHead;
    }
    Head->next=NULL;
    return NewHead;
}

void print(struct data * Head)
{
    struct data *p;
    p=Head;
    if(Head!=NULL)
        do
        {
            printf("%6d",p->num);
            p=p->next;
        }while(p!=NULL);
    printf("\n");
}
搜索更多相关主题的帖子: 检查 链表程序 
2011-09-27 22:40
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
直接用投插法 建立完了之后直接输出

                                         
===========深入<----------------->浅出============
2011-09-27 22:42
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:0 
回复 2楼 laoyang103
头插法?
2011-09-27 22:45
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
恩 头插法 就是每次在表头和第一个节点之间插入新的元素  这样直接就是逆序

                                         
===========深入<----------------->浅出============
2011-09-27 22:48
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
这里的话  我们可以借助栈 来实现对单链表的逆序输出

Discuz!  
好好学习  天天向上
2011-09-28 09:48
yanggexiaosa
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-9-26
收藏
得分:0 
刚来论坛报到,最近玩游戏闲得慌..就来注册个这个玩玩.看你程序就知道逆序问题..
struct data * sort(struct data * Head)
{
    struct data *p,*NewHead=NULL;
    p=NewHead=Head;
    while(NewHead->next!=NULL)
    {
       NewHead=NewHead->next;
        NewHead->next=p;
        p=NewHead;
    }
    Head->next=NULL;
    return NewHead;
}
你想一直指到最后一个数,但你错了.你的NewHead->next=P运行时就指向了前一个数.而NewHead=NewHead->next;永远指向P也就是头一个结点.
你我程序出现死循环状态...


我增加了一个结点指向了下个结点。辅助作用。你自己理解。。
struct data * sort(struct data * Head)
{
    struct data *p,*NewHead=NULL,*q;
    p=NewHead=q=Head;
    q=q->next;              //下一个结点
    while(q!=NULL)
    {
        NewHead=q;          //NewHead指向下一个结点
    q=q->next;              //q指向NewHead的下一个结点。
        NewHead->next=p;
        p=NewHead;
        
    }
    Head->next=NULL;
    return NewHead;
}
好好学习,天天向上...这是我回复的第一个贴,昨天刚注册的.
2011-09-28 11:21
快速回复:初次写链表程序,求帮忙检查错误
数据加载中...
 
   



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

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