| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 483 人关注过本帖
标题:菜鸟请教,关于链表插入。
只看楼主 加入收藏
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
菜鸟请教,关于链表插入。
程序代码:
root@~ #cat ins.c
#include <stdio.h>
//定义链表
struct entry {
        int val;
        struct entry *next;
};
int main (void) {
        int pos,num;                               //pos=结点,num=值
        struct entry n1,n2,n3,n4,n0;               //定义结构变量
        struct entry *head=&n1;                     //定义表头
        int Insert (struct entry *head,int pos,int num);  //声明函数insert
//初始化各个结点
        n1.val=111;
        n1.next=&n2;
        n2.val=222;
        n2.next=&n3;
        n3.val=333;
        n3.next=&n4;
        n4.val=444;
//定义表尾
        n4.next=(struct entry *)0;

        printf("Enter position and value:\n");
        scanf("%i%i",&pos,&num);
//如果结点在允许范围之内则打印链表,否则退出。
        if(Insert(head,pos,num)==-1) {
                printf ("Insert Failue!\n");
                return 1;
        }else{
                printf("\nAfter Insert...\n");
                while(head) {
                        printf("%i\n",head->val);
                        head=head->next;
                }
        }
        return 0;
}
//函数insert,问题就在这里,如果不写成函数,结果正确,如果写出函数, 错误就来啦。
int Insert (struct entry *head,int pos,int num) {
        int i=0;
        struct entry n0;

        while(head&&i<pos-1) {
                head=head->next;
                i++;
        }
        if(!head||i>pos-1) return -1;
        n0.val=num;
        n0.next=head->next;
        head->next=&n0;

}
root@~ #

错误信息
程序代码:
root@~ #/ins
bash: /ins: No such file or directory
root@~ #./ins
Enter position and value:
1 999   //结点1后插入999

After Insert...
111
4202594
999
120552
Segmentation fault (core dumped)
root@~ #
搜索更多相关主题的帖子: next cat 
2011-05-06 12:57
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:20 
程序代码:
while(head&&i<pos-1) {
                head=head->next;
                i++;
        }
        if(!head||i>pos-1) return -1;  //我也看不出来什么问题,这个写得不太好,改一下吧。另外注意指针是引用!

   唯实惟新 至诚致志
2011-05-06 16:14
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用qq1023569223在2011-5-6 16:14:59的发言:

while(head&&i<pos-1) {
                head=head->next;
                i++;
        }
        if(!head||i>pos-1) return -1;  //我也看不出来什么问题,这个写得不太好,改一下吧。另外注意指针是引用!

嗯, 不过我感觉这行代码无关紧要(去掉这行无所谓)。 问题是不用函数就可以正常插入。 用了函数反而如上所示,出现一些垃圾数。
看来还得把函数回回炉。
MLGB的, 不搞定丫挺的我。。。。

[ 本帖最后由 ansic 于 2011-5-6 16:29 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-06 16:17
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
程序代码:
int Insert (struct entry *head,int pos,int num) {
        int i=0;
        struct entry n0;

        while(head&&i<pos-1) {
                head=head->next;
                i++;
        }
        if(!head||i>pos-1) return -1;
        n0.val=num;  //
        n0.next=head->next;//
        head->next=&n0;//能说说下你这三行的思路吗?

}

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-06 23:39
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用liangjinchao在2011-5-6 23:39:52的发言:

int Insert (struct entry *head,int pos,int num) {
        int i=0;
        struct entry n0;

        while(head&&i<pos-1) {
                head=head->next;
                i++;
        }
        if(!head||i>pos-1) return -1;
        n0.val=num;  //
        n0.next=head->next;//
        head->next=&n0;//能说说下你这三行的思路吗?

}

(#‵′),纠结ING!!!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-07 00:04
快速回复:菜鸟请教,关于链表插入。
数据加载中...
 
   



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

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