798487012 发表于 2019-4-11 21:17:04

求助大佬~关于创建链表失败的问题

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

#definenull    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;
}

jackz007 发表于 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                ;
      }
}

82457097 发表于 2019-4-12 10:28:13

传入的形参改成LinkNode *L
页: [1]
查看完整版本: 求助大佬~关于创建链表失败的问题