注册 登录
编程论坛 C语言论坛

【新手求助】恳请各位大佬帮我看看这个链表哪里出错了 系统提示无错误无警告 但是输入完数据之后就提示回车退出了

程序小新 发布于 2020-04-16 14:42, 1514 次点击
/*
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct pNode
{
    int data;
    struct pNode *next;
};
void updata(struct pNode *headNode,int n,int m)
{
    int i;
    struct pNode *a,*b,*c;
    b = headNode->next;
    for(i = 0;i < n-m-1;i++)
        b = b->next;
    a = b;         //a保存需要往前移的链段的前一个结点的地址
    b = b->next;     //b保存寻找需要往前移的链段的第一个结点的地址
    c = b;
    for(i = 0;i < m-1;i++)
        c = c->next;    //c保存初始链表尾结点的地址
    c->next = headNode->next;
    headNode->next = b;
    a->next = NULL;
}
void output(struct pNode *headNode) //创建链表之后只运行这个函数也出不来结果
{
    struct pNode *q;
    q = headNode->next;
    printf("前面各数顺序向后移m个位置后新链表为:\n");
    while(q != NULL)
    {
        printf("%d ",q->data);
        q = q->next;
    }
}
void main()
{
    int m,n;
    int i;
    int number;
    struct pNode *headNode;//头结点
    struct pNode *p;
    printf("请输入原链表有几个整数:");
    scanf("%d",&n);
    printf("请输入需要后移几个位置:");
    scanf("%d",&m);
    printf("请输入链表中的元素:\n");
    headNode = (struct pNode *)malloc(sizeof(struct pNode));
    p = headNode->next;
    for(i = 0;i < n-1;i++)
    {
        p = (struct pNode *)malloc(sizeof(struct pNode));
        scanf("%d",&number);
        p->data = number;
        p = p->next;
    }
    p = (struct pNode *)malloc(sizeof(struct pNode));
    scanf("%d",&number);
    p->data = number;
    p->next = NULL;//尾结点的next为NULL
    if(m>n)
        printf("error!\n");
    else
    {
        updata(headNode,n,m);
        output(headNode);
    }
}
4 回复
#2
吹水佬2020-04-16 17:21
有好几处输入,输入到哪里出错
#3
程序小新2020-04-16 17:44
回复 2楼 吹水佬
运行结果如下:
请输入原链表有几个整数:5
请输入需要后移几个位置:3
请输入链表中的元素:
1
2
3
4
5
Press any key to continue

每次都是这样输入完就直接让退出了
#4
forever742020-04-16 18:53
你的头结点里面的next是野指针,与其他结点并无连接。
#5
程序小新2020-04-16 20:17
回复 4楼 forever74
谢谢大佬的提示,已经把野指针解决了,程序也运行成功了,万分感谢。
1