| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 599 人关注过本帖
标题:高手帮忙看看 谢谢
只看楼主 加入收藏
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
结帖率:92.86%
收藏
已结贴  问题点数:10 回复次数:7 
高手帮忙看看 谢谢
#include <stdio.h>
#include <stdlib.h>
#define N 8

typedef struct list
{
    int data;
    struct list *next;
}ko;

void fun(ko *h)
{
    ko *p, *q;
    p=h->next;
    if(p!=NULL)
    {
        q=p->next;
        while(q!=NULL)
        {
            if(p->data==q->data)
            {
                p->next=q->next;
                free(q);
                q=p->next;
            }
            else
            {
                p=q;
                q=q->next;
            }
        }
    }
}

ko *inlist(int *a)
{
    ko *h, *p, *q;
    int i;
    h=p=(ko *)malloc(sizeof(ko));
    for(i=0;i<N;i++)
    {
        q=(ko *)malloc(sizeof(ko));
        q->data=a[i];
        p->next=q;
        p=q;
    }
    p->next=NULL;
    return h;
}


void outlist(ko *h)
{
    ko *p;
    p=h->next;
    if(p==NULL)
        printf("the list is NULL");
    else
    {
        printf("\nHead");
        do
        {
            printf("->%d", p->data);
            p=p->next;
        }while(p!=NULL);
        printf("->End\n");
    }
}

void main()
{
    ko *head;
    int a[N]={1, 2, 2, 3, 4, 4, 5};
    head=inlist(a);
    printf("the list original data:\n");
    outlist(head);
    fun(head);
    printf("the affter data:\n");
    outlist(head);
    getch();
}
为什么运行后   结果后面多了一个0 出来  找不出原因  
2015-09-18 23:32
小王KING
Rank: 2
等 级:论坛游民
威 望:1
帖 子:29
专家分:69
注 册:2015-9-9
收藏
得分:4 
没仔细看,看到inlist就没看了
int a[N]={1, 2, 2, 3, 4, 4, 5};  这是在main函数的定义,数组有8个数据,你只给7个数据赋值了,还有一个没赋值,它的内容就是0;
ko *inlist(int *a)
{
    ko *h, *p, *q;
    int i;
    h=p=(ko *)malloc(sizeof(ko));
    for(i=0;i<N;i++)
    {
        q=(ko *)malloc(sizeof(ko));
        q->data=a[i];
        p->next=q;
        p=q;
    }
    p->next=NULL;
    return h;
}
然而你在创建链表的时候,建了8个点,把那个没有赋值的那个数组元素也加进来了。
不知道问题是不是在这里,因为没继续看下去
2015-09-19 00:22
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:6 
程序代码:
ko *inlist(int *a)
{
    ko *h, *p, *q;
    int i;
    h=p=(ko *)malloc(sizeof(ko));
    for(i=0;i<N;i++)                  //修改建议将判断条件改为i<N-1,为尾结点赋值NULL留一位 
    {
        q=(ko *)malloc(sizeof(ko));
        q->data=a[i];
        p->next=q;
        p=q;
        printf("\n============a[%d]:%d================\n",i,a[i]);  //此处显示赋值情况修改完毕可删除 
    }
    p->next=NULL;
    return h;
}

建议结构体命名具有一定含义,形式简洁是第二位
程序代码:
void main()
{
    ko *head;
    int a[N]={1, 2, 2, 3, 4, 4, 5};
    head=inlist(a);
    printf("the list original data:\n");
    outlist(head);                                //代码建议此处调用前对数组先排序后调用 
    fun(head);
    printf("the affter data:\n");
    outlist(head);
    getch();
}

排序代码应该不陌生吧?

剑栈风樯各苦辛,别时冰雪到时春
2015-09-19 07:17
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 2楼 小王KING
应该是把

不要不要的。。。
2015-09-19 14:23
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 3楼 林月儿
恩恩  好的哦 以解决  原来是少赋值了一个  多加了一个节点

不要不要的。。。
2015-09-19 14:33
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用露营地在2015-9-19 14:33:07的发言:

恩恩  好的哦 以解决  原来是少赋值了一个  多加了一个节点



恩,调整一下吧,我说的排序稍稍考虑就好了,你的去重算法适合有序数组
所以排序还是要考虑一下的

剑栈风樯各苦辛,别时冰雪到时春
2015-09-19 14:35
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 6楼 林月儿
我也觉得  不然的话 乱序的话  这个程序就没办法将重复的去除了  他只能将相邻的两个进行比较

不要不要的。。。
2015-09-19 14:47
jwh20031015
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-9-16
收藏
得分:0 
2015-09-19 14:48
快速回复:高手帮忙看看 谢谢
数据加载中...
 
   



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

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