鱼C论坛

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

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

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

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

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

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

  5. #define  null    0

  6. typedef struct LNode{
  7.         ElemType data;
  8.         struct LNode *next;
  9. }LNode,*LinkList;

  10. void CreateList(LinkList L,int n){
  11.         int i;
  12.         LinkList p;
  13.         L=(LinkList)malloc(sizeof (LNode));
  14.         L->next=NULL;
  15.         printf("请输入顺序表中的元素:");
  16.         for(i=n;i>0;--i){
  17.                 p=(LinkList)malloc(sizeof (LNode));
  18.                 scanf("%d",
  19.                         &p->data);
  20.                 p->next=L->next;L->next=p;
  21.         }
  22. }

  23. void Listtraverse(LinkList L)
  24. {
  25.         //遍历链式表l
  26.         LinkList p=L->next;
  27.         while(p!=0)
  28.         {
  29.                 printf("%d\n",p->data);
  30.                 p=p->next;
  31.         }
  32. }

  33. int GetElem(LinkList L,int i)
  34. {
  35.         //取带头节点的单链表l中第i个元素,用e返回
  36.         int j;
  37.         int e;
  38.         LinkList p;
  39.         p=L->next;
  40.         j=1;
  41.         while(p&&j<i)
  42.         {
  43.                 p=p->next;
  44.                 ++j;
  45.         }
  46.         if(!p||j>i)return 0;
  47.         e=p->data;
  48.         printf("第%d个元素是%d\n",i,e);
  49.         return 0;
  50. }


  51. main(){
  52.         LinkList L;
  53.         int n;
  54.         printf("输入节点数:");
  55.         scanf("%d",&n);
  56.         CreateList(L,n);
  57.        
  58.         while(L){
  59.                 printf("%d\n",L->data);
  60.                 L=L->next;
  61.         }
  62.         return 0;
  63. }
复制代码
最佳答案
2019-4-11 22:05:07
本帖最后由 jackz007 于 2019-4-12 14:21 编辑
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<stdlib.h>

  4. typedef struct LNode {
  5.         int data            ;
  6.         struct LNode * next ;
  7. } LNode , * LinkList        ;

  8. LinkList CreateList(void)
  9. {
  10.         int i , n  , data                                                       ;
  11.         LinkList head , p1 , p2                                                 ;
  12.         head = NULL                                                             ;
  13.         printf("输入节点数:")                                                  ;
  14.         scanf("%d" , & n)                                                       ;
  15.         if(n > 0) {
  16.                 for(i = 0 ; i < n ; i ++) {
  17.                         printf("节点 %d : " , i + 1)                            ;
  18.                         scanf("%d" , & data)                                    ;
  19.                         if((p2 = (LinkList) malloc(sizeof(LNode))) != NULL) {
  20.                                 p2 -> data = data                               ;
  21.                                 p2 -> next = NULL                               ;
  22.                                 if(! i) head = p2                               ;
  23.                                 else p1 -> next = p2                            ;
  24.                                 p1 = p2                                         ;
  25.                         } else {
  26.                                 fprintf(stderr , "error : malloc() failure!\n") ;
  27.                                 break                                           ;
  28.                         }
  29.                 }
  30.         }
  31.         return head                                                             ;
  32. }


  33. void Listtraverse(LinkList L)
  34. {
  35.         LinkList p                                  ;
  36.         p = L                                       ;
  37.         while(p != NULL) {
  38.                 printf("%d\n" , p -> data)          ;
  39.                 p = p -> next                       ;
  40.         }
  41. }

  42. int GetElem(LinkList L , int n)
  43. {
  44.         int i , e                                                    ;
  45.         LinkList p                                                   ;
  46.         e = -1                                                       ;            
  47.         for(i = 0 , p = L ; i < n && p != NULL ; i ++) p = p -> next ;
  48.         if(i == n && p != NULL) {
  49.                 printf("第%d个元素是%d\n" , n , p -> data)           ;
  50.                 e = 0                                                ;
  51.         }
  52.         return e                                                     ;
  53. }

  54. main(void)
  55. {
  56.         LinkList L                         ;

  57.         L = CreateList()                   ;
  58.         while(L){
  59.                 printf("%d\n" , L -> data) ;
  60.                 L = L->next                ;
  61.         }
  62. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  4. typedef struct LNode {
  5.         int data            ;
  6.         struct LNode * next ;
  7. } LNode , * LinkList        ;

  8. LinkList CreateList(void)
  9. {
  10.         int i , n  , data                                                       ;
  11.         LinkList head , p1 , p2                                                 ;
  12.         head = NULL                                                             ;
  13.         printf("输入节点数:")                                                  ;
  14.         scanf("%d" , & n)                                                       ;
  15.         if(n > 0) {
  16.                 for(i = 0 ; i < n ; i ++) {
  17.                         printf("节点 %d : " , i + 1)                            ;
  18.                         scanf("%d" , & data)                                    ;
  19.                         if((p2 = (LinkList) malloc(sizeof(LNode))) != NULL) {
  20.                                 p2 -> data = data                               ;
  21.                                 p2 -> next = NULL                               ;
  22.                                 if(! i) head = p2                               ;
  23.                                 else p1 -> next = p2                            ;
  24.                                 p1 = p2                                         ;
  25.                         } else {
  26.                                 fprintf(stderr , "error : malloc() failure!\n") ;
  27.                                 break                                           ;
  28.                         }
  29.                 }
  30.         }
  31.         return head                                                             ;
  32. }


  33. void Listtraverse(LinkList L)
  34. {
  35.         LinkList p                                  ;
  36.         p = L                                       ;
  37.         while(p != NULL) {
  38.                 printf("%d\n" , p -> data)          ;
  39.                 p = p -> next                       ;
  40.         }
  41. }

  42. int GetElem(LinkList L , int n)
  43. {
  44.         int i , e                                                    ;
  45.         LinkList p                                                   ;
  46.         e = -1                                                       ;            
  47.         for(i = 0 , p = L ; i < n && p != NULL ; i ++) p = p -> next ;
  48.         if(i == n && p != NULL) {
  49.                 printf("第%d个元素是%d\n" , n , p -> data)           ;
  50.                 e = 0                                                ;
  51.         }
  52.         return e                                                     ;
  53. }

  54. main(void)
  55. {
  56.         LinkList L                         ;

  57.         L = CreateList()                   ;
  58.         while(L){
  59.                 printf("%d\n" , L -> data) ;
  60.                 L = L->next                ;
  61.         }
  62. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-12 10:28:13 From FishC Mobile | 显示全部楼层
传入的形参改成LinkNode *L
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 11:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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