回 帖 发 新 帖 刷新版面

主题:[讨论]逆转一个线性表

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

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node * link;
}LNode,*LinkList;

LinkList Creat(int n)
{
    LinkList p,r,list;
    int i,num;
    list=NULL;
    for(i=1;i<=n;i++)
    {
        puts("Input a number");
        scanf("%d",&num);
        p=(LinkList)malloc(sizeof(LNode));
        p->data=num;
        p->link=NULL;
        if(list==NULL)
            list=p;
        else 
            r->link=p;
        r=p;
    }
    return list;
}

LinkList Invert(LinkList list)
{
    LinkList q,p,r;
    p=list;
    q=NULL;
    while(p!=NULL)
    {
        r=q;
        q=p;
        p=p->link;
        q->link=r;
    }
    return q;
}

void Print(LinkList list)
{
    LinkList p;
    p=list;
    while(p!=NULL)
    {
        printf("%d\n",p->data);
        p=p->link;
    }
}

main()
{
    int n;
    LinkList list,ilist;
    puts("Input the size of LinkList you want to creat");
    scanf("%d",&n);
    list=Creat(n);
    
    ilist=Invert(list);
    Print(list);
    Print(ilist);
    system("pause");
}

大家好。。。这个程序到底错在哪里

回复列表 (共3个回复)

沙发

没错阿
是你看的方法有问题
原串在你的操作之后应该只剩下末元可取

板凳

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

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node * link;
}LNode,*LinkList;

LinkList Creat(int n)
{
    LinkList p,r,list;
    int i,num;
    list=NULL;
    for(i=1;i<=n;i++)
    {
        puts("Input a number");
        scanf("%d",&num);
        p=(LinkList)malloc(sizeof(LNode));
        p->data=num;
        p->link=NULL;
        if(list==NULL)
            list=p;
        else 
            r->link=p;
        r=p;
    }
    return list;
}

LinkList Invert(LinkList list)
{
    LinkList q,p,r;
    p=list;
    q=NULL;
    while(p!=NULL)
    {
        r=q;
        q=p;
        p=p->link;
        q->link=r;
    }
    return q;
}

void Print(LinkList list)
{
    LinkList p;
    p=list;
    printf("\n");
    while(p!=NULL)
    {
        printf("%d",p->data);
        p=p->link;
    }
    printf("\n");
}

main()
{
    int n;
    LinkList list,ilist;
    puts("Input the size of LinkList you want to creat");
    scanf("%d",&n);
    list=Creat(n);
    
    ilist=Invert(list);
    Print(list);
    Print(ilist);
    system("pause");
}
把打印方法调整了一下
输入
3
0
1
2
输出
0
210

3 楼

那为什么 还输出了一个0,我是想把list也打印出来,可是只打印了第一个元素

我来回复

您尚未登录,请登录后再回复。点此登录或注册