鱼C论坛

 找回密码
 立即注册
查看: 1323|回复: 2

[已解决]求助大佬~关于创建链表失败的问题

[复制链接]
发表于 2019-4-11 21:17:04 | 显示全部楼层 |阅读模式

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

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

x
最近刚学数据结构,感觉书上的好多算法自己在实际敲的过程中,每次都有好多错误,不知道是编译器的问题还是我的代码问题~~但是把网上大佬的程序拷贝下来运行也是好多错误。
比如说我下面创建链表,照书上打报很多错,自己结合网上的代码修改,虽然不报错了,但是在输出是也不成功,遍历不出来,而且GetElem也错误。求大佬们看看呀~~~
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int ElemType;

#define  null    0

typedef struct LNode{
        ElemType data;
        struct LNode *next;
}LNode,*LinkList;

void CreateList(LinkList L,int n){
        int i;
        LinkList p;
        L=(LinkList)malloc(sizeof (LNode));
        L->next=NULL;
        printf("请输入顺序表中的元素:");
        for(i=n;i>0;--i){
                p=(LinkList)malloc(sizeof (LNode));
                scanf("%d",
                        &p->data);
                p->next=L->next;L->next=p;
        }
}

void Listtraverse(LinkList L)
{
        //遍历链式表l
        LinkList p=L->next;
        while(p!=0)
        {
                printf("%d\n",p->data);
                p=p->next;
        }
}

int GetElem(LinkList L,int i)
{
        //取带头节点的单链表l中第i个元素,用e返回
        int j;
        int e;
        LinkList p;
        p=L->next;
        j=1;
        while(p&&j<i)
        {
                p=p->next;
                ++j;
        }
        if(!p||j>i)return 0;
        e=p->data;
        printf("第%d个元素是%d\n",i,e);
        return 0;
}


main(){
        LinkList L;
        int n;
        printf("输入节点数:");
        scanf("%d",&n);
        CreateList(L,n);
        
        while(L){
                printf("%d\n",L->data);
                L=L->next;
        }
        return 0;
}
最佳答案
2019-4-11 22:05:07
本帖最后由 jackz007 于 2019-4-12 14:21 编辑
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct LNode {
        int data            ;
        struct LNode * next ;
} LNode , * LinkList        ;

LinkList CreateList(void)
{
        int i , n  , data                                                       ;
        LinkList head , p1 , p2                                                 ;
        head = NULL                                                             ;
        printf("输入节点数:")                                                  ;
        scanf("%d" , & n)                                                       ;
        if(n > 0) {
                for(i = 0 ; i < n ; i ++) {
                        printf("节点 %d : " , i + 1)                            ;
                        scanf("%d" , & data)                                    ;
                        if((p2 = (LinkList) malloc(sizeof(LNode))) != NULL) {
                                p2 -> data = data                               ;
                                p2 -> next = NULL                               ;
                                if(! i) head = p2                               ;
                                else p1 -> next = p2                            ;
                                p1 = p2                                         ;
                        } else {
                                fprintf(stderr , "error : malloc() failure!\n") ;
                                break                                           ;
                        }
                }
        }
        return head                                                             ;
}


void Listtraverse(LinkList L)
{
        LinkList p                                  ;
        p = L                                       ;
        while(p != NULL) {
                printf("%d\n" , p -> data)          ;
                p = p -> next                       ;
        }
}

int GetElem(LinkList L , int n)
{
        int i , e                                                    ;
        LinkList p                                                   ;
        e = -1                                                       ;             
        for(i = 0 , p = L ; i < n && p != NULL ; i ++) p = p -> next ;
        if(i == n && p != NULL) {
                printf("第%d个元素是%d\n" , n , p -> data)           ;
                e = 0                                                ;
        }
        return e                                                     ;
}

main(void)
{
        LinkList L                         ;

        L = CreateList()                   ;
        while(L){
                printf("%d\n" , L -> data) ;
                L = L->next                ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-11 22:05:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-4-12 14:21 编辑
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct LNode {
        int data            ;
        struct LNode * next ;
} LNode , * LinkList        ;

LinkList CreateList(void)
{
        int i , n  , data                                                       ;
        LinkList head , p1 , p2                                                 ;
        head = NULL                                                             ;
        printf("输入节点数:")                                                  ;
        scanf("%d" , & n)                                                       ;
        if(n > 0) {
                for(i = 0 ; i < n ; i ++) {
                        printf("节点 %d : " , i + 1)                            ;
                        scanf("%d" , & data)                                    ;
                        if((p2 = (LinkList) malloc(sizeof(LNode))) != NULL) {
                                p2 -> data = data                               ;
                                p2 -> next = NULL                               ;
                                if(! i) head = p2                               ;
                                else p1 -> next = p2                            ;
                                p1 = p2                                         ;
                        } else {
                                fprintf(stderr , "error : malloc() failure!\n") ;
                                break                                           ;
                        }
                }
        }
        return head                                                             ;
}


void Listtraverse(LinkList L)
{
        LinkList p                                  ;
        p = L                                       ;
        while(p != NULL) {
                printf("%d\n" , p -> data)          ;
                p = p -> next                       ;
        }
}

int GetElem(LinkList L , int n)
{
        int i , e                                                    ;
        LinkList p                                                   ;
        e = -1                                                       ;             
        for(i = 0 , p = L ; i < n && p != NULL ; i ++) p = p -> next ;
        if(i == n && p != NULL) {
                printf("第%d个元素是%d\n" , n , p -> data)           ;
                e = 0                                                ;
        }
        return e                                                     ;
}

main(void)
{
        LinkList L                         ;

        L = CreateList()                   ;
        while(L){
                printf("%d\n" , L -> data) ;
                L = L->next                ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-12 10:28:13 From FishC Mobile | 显示全部楼层
传入的形参改成LinkNode *L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 14:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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