社区讨论
为啥输出不符合预期?恳请神犇解答
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...