蚂蚁村长 发表于 2020-9-30 20:30:37

求助大家,这个单链表的代码错在哪里了?为什么输出不是正常的结果

题目是:输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。

输入样例:

5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6

输出样例:

7 1 2 8 3 5

我的程序:

#include<stdio.h>
#include<malloc.h>

typedef struct Node
{
int data;
        struct Node *Next;
}Node,*LinkList;
typedef struct Node*LinkList;
void creatList(LinkList &L,int n)
{
        L=(LinkList)malloc(sizeof(Node));
        L->Next=NULL;
        while(n--)
        {
                LinkList p=(LinkList)malloc(sizeof(Node));
                scanf("%d",&p->data);
                p->Next=L->Next;
                L->Next=p;
        }
}
int Listsize(LinkList &L)
{
        int count=0;
        LinkList p;
        p=L;
        while(p!=NULL)
        {
                p=p->Next;
                count++;
        }
        return count;
}
int insertList(LinkList &L,int i,int e)
{
        if(i>=Listsize(L))
        {
                return -1;
        }
        int j;
        LinkList p,s;
        p=L;
        j=0;
       
        while(p&&j<i-1)
        {
                p=p->Next;
                j++;
        }
       
        if(!p||j>i-1)
        {
                return -1;
        }
       
        s=(LinkList)malloc(sizeof(Node));
        s->data=e;
        s->Next=p->Next;
        p->Next=s;
        return 0;
}

int delList(LinkList &L,int i)
{
        if(i==0||i>=Listsize(L))
        {
                return -1;
        }
        int j;
        LinkList p,s;
        p=L;
        j=0;
        while(p->Next&&j<i-1)
        {
                p=p->Next;
                ++j;
        }
       
        if(!(p->Next)||j>i-1)
        {
                return -1;
        }
        s=p->Next;
        p->Next=s->Next;
        if(p->data!=NULL)
        {
                p->data=s->data;
        }
        free(s);
        return 0;
}

void printList(LinkList &L)
{
        LinkList p;
        p=L;
        while(p!=NULL)
        {
                p=p->Next;
                printf("%d ",p->data);
        }
}

int main()
{
        int n,m,i,flag,k,data;
        LinkList list;
        scanf("%d",&n);
        if(n>=100000)
        {
                return 0;
        }
        creatList(list,n);
       
        scanf("%d",&m);
        if(m>=100000)
        {
                return 0;
        }
        for(i=0;i<m;i++)
        {
                scanf("%d",&flag);
                if(flag==0)
                {
                        scanf("%d%d",&k,&data);
                        insertList(list,k,data);
                }
                if(flag==1)
                {
                        scanf("%d",&k);
                        delList(list,k);
                }
        }
        printList(list);
        return 0;
}


巴巴鲁 发表于 2020-10-1 10:52:28

我为什么会报错,你把你的运行结果发过来

巴巴鲁 发表于 2020-10-1 10:53:48

感觉应该是输出函数的问题
void printList(LinkList &L)
{
      LinkList p;
      p=L;
      while(p!=NULL)
      {
               // 先打印当前结点,再指向下一结点
                printf("%d ",p->data);
                p=p->Next;
      }
}

蚂蚁村长 发表于 2020-10-4 21:16:25

巴巴鲁 发表于 2020-10-1 10:52
我为什么会报错,你把你的运行结果发过来

sorry大佬才看到你的留言

蚂蚁村长 发表于 2020-10-4 21:17:36

蚂蚁村长 发表于 2020-10-4 21:16
sorry大佬才看到你的留言

这个是应该有的结果

巴巴鲁 发表于 2020-10-6 11:43:23

蚂蚁村长 发表于 2020-10-4 21:16
sorry大佬才看到你的留言

不好意思,我学的c,这是c++,最近几天学了在来看看

巴巴鲁 发表于 2020-10-6 11:52:36

蚂蚁村长 发表于 2020-10-4 21:16
sorry大佬才看到你的留言

嘻嘻,加我QQ一下,方便讨论
3194244910
备注成蚂蚁村长
页: [1]
查看完整版本: 求助大家,这个单链表的代码错在哪里了?为什么输出不是正常的结果