noah&plus 2015-09-24 08:43 采纳率: 0%
浏览 1497

请问这个链表为什么会出现循环输出第一组数的情况

 #include<stdio.h>
#include<stdlib.h>//含malloc.h
#include<malloc.h>
#define LEN sizeof( Faction)
//一元多项式结构体
typedef struct Faction{
    int coefficient;//系数
    int exponent;//指数
    struct Faction *next;
}Faction;
//创建链表
Faction *creat() {
    Faction *head, *p1, *p2;
    head = NULL;
    p1 = p2 = (Faction*)malloc(LEN);
    scanf("%d %d", &(p1->coefficient), &(p1->exponent));
    p1->next = NULL;
    while(p1->coefficient != -1 || p1->exponent != -1) {
        if(head == NULL)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        p1 = (Faction*)malloc(LEN);
        scanf("%d %d", &(p1->coefficient), &(p1->exponent));//此处可以顺便统数据个数
    }
    p2->next = NULL;
    free(p1);
    p1 = NULL;
    return head;
}
//输出链表
void Print(Faction *head) {
    Faction *p;
    p = head;
    while(p != NULL) {
            printf("%d %d\ ", p->coefficient, p->exponent);//空格就是\
            p = p->next;
    }
}
//计算降幂
void calculate(Faction *head) {
    Faction *p;
    p = head;
    if(head != NULL) {
        do{
            p->coefficient = p->coefficient * p->exponent;
            p->exponent -= p->exponent;
            if(p->coefficient == 0) {
                p->next = NULL;
            }
            p = p->next;
        }while(p->next != NULL);
    }
}
//
int main() {
    Faction *head;
    //head = NULL;
    head = creat();
//  calculate(head);
    Print(head);
    return 0;
}




  • 写回答

1条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2015-09-24 08:54
    关注

    那就是p->next指向有问题了
    creat中的while循环,内部操作的都是已经存在的指针,并没有创建新指针,这里应该导致了指向地址都是同一个

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型