孤寡小白学计科 2021-10-05 21:16 采纳率: 100%
浏览 85
已结题

数据结构——单链表长度的计算并将其结构存放于头节点的数据域中

请编写一个完整的程序
1.计算单链表的长度,并将结果存放在头节点的数据域中,然后输出单链表。(在下面的代码中应该怎么做?)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
    struct Node{
        int Data;
        struct Node*Next;
    };
    void Print(struct Node *L){
        struct Node *q;
        q=L->Next;
        while(q!=NULL){
            printf("%d  ",q->Data);
            q=q->Next;
        }
    }

    void Insert(struct Node*L,int n){    //插入数据 
        struct Node*p,*q;
        p=L;
        q=(struct Node*)malloc(sizeof(struct Node));
        while(p->Next!=NULL&&p->Next->Data<n){
            p=p->Next;
        }
        q->Data=n;
        q->Next=p->Next;
        p->Next=q;    
        
    }

    void length(Node *L) //计算单链表长度 
{
    Node *p;
    *p=*L->Next;
    int j=0;
    while(p!=NULL)
    {
        p=p->Next;
        j++;
    }
    
    printf("%d",j); //为什么在运行结果中无法显示?
    printf("\n");
}
    int main(){
        struct Node *L;
        L=(struct Node*)malloc(sizeof(struct Node));
        L->Next=NULL;
        srand((int)time(NULL));
        int i;
        for(i=1;i<20;i++){
    
            Insert(L,rand()%200); 
        }
        Print(L);
        return 0;
    }



  • 写回答

2条回答 默认 最新

  • 关注

    主要是

    *p = *L->Next;

    写错了,应该是

    p = L->Next;
    

    length(struct Node *L)函数没有调用啊
    你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    struct Node
    {
        int Data;
        struct Node *Next;
    };
    void Print(struct Node *L)
    {
        struct Node *q;
        q = L->Next;
        while (q != NULL)
        {
            printf("%d  ", q->Data);
            q = q->Next;
        }
    }
    void Insert(struct Node *L, int n)
    { //插入数据
        struct Node *p, *q;
        p = L;
        q = (struct Node *)malloc(sizeof(struct Node));
        while (p->Next != NULL && p->Next->Data < n)
        {
            p = p->Next;
        }
        q->Data = n;
        q->Next = p->Next;
        p->Next = q;
    }
    void length(struct Node *L) //计算单链表长度
    {
        struct Node *p;
        p = L->Next;
        int j = 0;
        while (p != NULL)
        {
            p = p->Next;
            j++;
        }
        L->Data = j;
        printf("%d", j); //为什么在运行结果中无法显示?
        printf("\n");
    }
    int main()
    {
        struct Node *L;
        L = (struct Node *)malloc(sizeof(struct Node));
        L->Next = NULL;
        srand((int)time(NULL));
        int i;
        for (i = 1; i < 20; i++)
        {
            Insert(L, rand() % 200);
        }
        length(L);
        Print(L);
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 已采纳回答 10月5日
  • 创建了问题 10月5日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加