社区讨论

为啥输出不符合预期?恳请神犇解答

灌水区参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m1v1fn41
此快照首次捕获于
2024/10/05 02:07
去年
此快照最后确认于
2024/10/05 10:23
去年
查看原帖
输入:1 2 3 4 5(创建一个链表)
预期输出:1 2 3 5 3
预期步骤:
①位置5插入3,得到1 2 3 4 5 3(注意我的插入函数不是标准的,我的插入是在某个位置后插入新结点)
②删除位置4,得到1 2 3 5 3并输出
实际输出:1 2 3 5
(为啥)
代码如下:
CPP
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ERROR 0
#define OKAY 1
//单链表的定义(描述)
typedef int ElemType;
typedef struct Node 
{
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node *LinkList;
//单链表的创建(以输入数据使用尾插法为例)
typedef int Status;
void CreateList_Tail(LinkList *L, int n)
{
    LinkList p, r;
    int i;
    *L = (LinkList)malloc(sizeof(Node));
    r = *L;
    for (i = 0; i < n; i++)
    {
        p = (LinkList)malloc(sizeof(Node));
        scanf("%d", &p->data);
        p->next = NULL;
        r->next = p;
        r = p;
    }
}
//单链表的读取
Status GetElem(LinkList L, int i, ElemType *e)
{
    LinkList p;
    int j=1;
    p = L->next;
    if(!p)
        return ERROR;
    for(; p && j<i; j++)
        p = p->next;
    if(!p || j>i)
        return ERROR;
    *e = p->data;
    return OKAY;
}
//单链表的插入
Status ListInsert(LinkList *L, int i, ElemType e)
{
    LinkList p;
    int j=1;
    p = *L;
    for(; p && j<=i; j++)
        p = p->next;
    if(!p || j>i)
        return ERROR;
    LinkList s = (LinkList)malloc(sizeof(Node));
    s->data = e;
    s->next = p->next; 
    p->next = s;
    return OKAY;
}
//单链表的结点删除
Status ListDelete(LinkList *L,int i,ElemType *e)
{
    LinkList p,q;
    int j=1;
    p = *L;
    for(; (p->next) && j<i;j++)
        p = p->next;
    q = p->next; 
    if(!q || j>i)
        return ERROR;
    p->next = q->next;
    *e = q->data;
    free(q);
    q = NULL;
    return OKAY;
}
//单链表的整表删除
Status ClearList(LinkList *L)
{
    LinkList p,q;
    p = (*L)->next;
    while(p)
    {
        q = p->next;
        free(p);
        p = q;
    }
    free(*L);
    (*L)->next = NULL;
    return OKAY;
}
int main()
{
    LinkList L;
    int e;
    CreateList_Tail(&L, 5);
    ListInsert(&L, 3, 5);
    ListDelete(&L, 4, &e);
    for(LinkList p = L->next; p; p = p->next)
        printf("%d ", p->data);
    ClearList(&L);
    return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...