| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2001 人关注过本帖
标题:单链表(尾插入)创建链表时的问题
只看楼主 加入收藏
卡卡3315
Rank: 1
等 级:新手上路
帖 子:11
专家分:8
注 册:2019-6-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
单链表(尾插入)创建链表时的问题
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct student{
    int num;
    struct student *next;
}Node;

typedef struct _List{
    Node* head;
}List;//结构用来存储头指针 

void add(List *Plist,int number);//创建链表的函数 
void print(List *Plist);//遍历链表的函数 

int main(void)
{   List list;
    list.head = NULL;
    int number;
    do{
        scanf("%d",&number);
        if(number!=-1){
            add(&list,number);
        }
    }while(number!=-1);
    printf("遍历整个链表\n"); 
    print(&list);//打印整个链表
}
void print(List *Plist)
{   Node *P = NULL;
    for(P = Plist->head; P; P = P->next){
        printf("%d  ",P->num);
    }
    printf("\n");
}
void add(List *Plist,int number)
{
    Node *P = (Node*)malloc(sizeof(Node));
    P->num = number;
    P->next = NULL;
    Node *last = Plist -> head;(这里我原本写的是Node *last = NULL;)
    if(last){
        while (last->next){
            last = last->next;
        }
        last->next = P;
    } else {
        Plist->head = P;
    }
}



在代码中标记的地方, Node *last = Plist -> head; 这一行我原本写的是Node *last = NULL;,因为在main里面list.head就是NULL,反正都是NULL为什么不能直接给Node *last赋上NULL呢

代码结果如下:

图片附件: 游客没有浏览图片的权限,请 登录注册

这个是错误的结果,遍历只显示最后一个

图片附件: 游客没有浏览图片的权限,请 登录注册

正确的是显示全部的

忘了free了

[此贴子已经被作者于2020-4-10 23:41编辑过]

搜索更多相关主题的帖子: List Node head number NULL 
2020-04-10 23:39
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1697
专家分:4310
注 册:2007-12-27
收藏
得分:5 
要学会思考运行时的动态过程,在第一行它是NULL,执行到第二行就有可能变了,怎么能用老眼光看到底呢?
你昨天还吃饭了呢,为啥今天还要吃呢?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-11 00:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>

typedef struct student
{
    int num;
    struct student *next;
} List;

List* CreateList(int number);
List* add(List *Plist,int number);//创建链表的函数
void print(List *Plist);//遍历链表的函数

int main(void)
{
    List *head=NULL, *tail;
    int number;
    while(scanf("%d",&number)==1 && number!=-1)
    {
        if (head)
        {
            if ((tail=add(tail,number)) == NULL)
                break;
        }
        else
        {
            if ((head=CreateList(number)) == NULL)
                break;
            tail = head;
        }
    }
    printf("遍历整个链表\n");
    print(head);//打印整个链表
}

void print(List *Plist)
{
    for(; Plist; Plist=Plist->next)
        printf("%d\n",Plist->num);
}

List* CreateList(int number)
{
    List *P = (List*)malloc(sizeof(List));
    if (P)
    {
        P->num = number;
        P->next = NULL;
    }
    return P;
}

List* add(List *Plist,int number)
{
    Plist->next = (List*)malloc(sizeof(List));
    if (Plist->next)
    {
        Plist->next->num = number;
        Plist->next->next = NULL;
    }
    return Plist->next;
}


[此贴子已经被作者于2020-4-11 10:58编辑过]

2020-04-11 10:54
hbccc
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:108
专家分:315
注 册:2020-2-18
收藏
得分:5 
为什么一看到链表、指针啥的,就头大呢
2020-04-12 14:47
LGD335060087
Rank: 2
等 级:论坛游民
帖 子:36
专家分:13
注 册:2020-3-15
收藏
得分:5 
程序代码:
void add(List *Plist,int number)
{
    Node *P = (Node*)malloc(sizeof(Node));
    P->num = number;
    P->next = NULL;
    Node *last = Plist -> head;(这里我原本写的是Node *last = NULL;)
    if(last){
        while (last->next){
            last = last->next;
        }
        last->next = P;
    } else {
        Plist->head = P;
    }
}

你是需要查找最后一个节点当然不能给它赋值为NULL,如果你给它赋值为NULL就已经证明它是最后一个节点(查找节点信息必须从链表的头开始)

知识改变命运,代码更改时代
2020-04-12 16:18
快速回复:单链表(尾插入)创建链表时的问题
数据加载中...
 
   



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

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