这个程序错在哪里了?我只能输入一个节点的值,就终止了。

img

img

img


这个程序我错哪了?我输入了len等于5时,只能输入一个节点的值,就结束了终止了

img

第65 66 行,把65行的 return pHead; 这句 移动到 第66行的'}' 外面,也就是把 65 行 和 66 行 两行代码互换位置。这里的问题是把 return 括进了for {} 大括号里了,所以输入一次后,就返回头结点跳出for 循环。

把第65行的return pHead移到create_list()函数结尾就可以了,因为如果放在for循环,获取到一个值程序就会返回。修改如下:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

struct Node{
    
    int data;
    struct Node * pNext;
}; 

struct Node * create_list(void);
void traverse_list(struct Node *);

int main(void){
    
    struct Node * pHead = NULL;
    
    pHead = create_list();
    traverse_list(pHead);
    
    return 0;
    
}

struct Node * create_list(void){
    
    int len;
    int i;
    int val;
    
    struct Node * pHead = (struct Node * )malloc(sizeof(struct Node));
    
    if(NULL == pHead){
        printf("分配失败,程序终止!\n");
        exit(-1);
    
    }
    
    struct Node * pTail = pHead;
    pTail->pNext = NULL;
    
    printf("请输入您需要生成的链表节点的个数:len=");
    scanf("%d",&len);
    
    for (i=0;i<len;++i){
        printf("请输入第%d个节点的值:",i+1);
        scanf("%d",&val);
            
        struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
        if(NULL == pNew){
            printf("分配内存失败,程序终止!\n");
            exit(-1);
        }
        
        pNew->data = val;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
        
    
    }
    
        return pHead;
}


void traverse_list(struct Node * pHead){
    struct Node * p = pHead->pNext;
    
    while(NULL!=p){
        printf("%d ",p->data);
        p=p->pNext;
    }
    printf("\n");
}


img