qq_57931996 2022-01-06 20:21 采纳率: 88.9%

# （代码已写出，运行时出现了问题，求解？）已知一个不带头节点的单链表list,设计一个算法，使得链表中数据域值最大的结点被删除。

67行一下就打印不出来了不知道为什么？

``````#include"stdio.h"
#include"malloc.h"
typedef struct Node
{
int data;
struct Node* next;
}Node;
Node* create(Node* L, int n)
{
int x, i;
Node* h = NULL, * s = NULL;
h = (Node*)malloc(sizeof(Node));
L = h;
printf("请输入第1个数据：");
scanf_s("%d", &x);
h->data = x;
for (i = 2; i <= n; i++)
{
printf("请输入第%d个数据：",i);
scanf_s("%d", &x);
s = (Node*)malloc(sizeof(Node));
s->data = x;
h->next = s;
h = s;
}
h = NULL;
return L;
}
void display(Node* L)
{
Node* h;
h = L;
while (h)
{
printf("%d    ", h->data);
h = h->next;
}
printf("\n");
}
Node* dele(Node* L)
{
Node* h, * s;
int x,i,j;
h = L;
while (h != NULL)
{
if ((h->data) > (h->next->data))x = h->data;
h = h->next;
}
for (i = 1, h = L; h->data == x; i++)
h = h->next;
for (j = 0, h = L; h->next != NULL && j < i - 1; j++)
h = h->next;
s = h->next;
h->next=h->next->next;
free(s);
return L;
}
void main()
{
Node* List = NULL;
int num;
printf("请输入数据的个数：");
scanf_s("%d", &num);
List = create(List, num);
printf("原数据：");
display(List); printf("删除最大值后：");
/*List=dele(List);
printf("删除最大值后：");
display(List);*/
}

``````

• 写回答

#### 1条回答默认 最新

• 书山客 2022-01-07 09:40
关注
``````
#include"stdio.h"
#include"malloc.h"
typedef struct Node
{
int data;
struct Node* next;
}Node;
Node* create(Node* L, int n)
{
int x, i;
Node* h, * s;
h = (Node*)malloc(sizeof(Node));
L = h;
printf("请输入第1个数据：");
scanf_s("%d", &x);
h->data = x;
for (i = 2; i <= n; i++)
{
printf("请输入第%d个数据：", i);
scanf_s("%d", &x);
s = (Node*)malloc(sizeof(Node));
s->data = x;
s->next = NULL;
h->next = s;
h = s;
}
h = NULL;
return L;
}
void display(Node* L)
{
Node* h;
h = L;
while (h!=NULL)
{
printf("%d    ", h->data);
h = h->next;
}
printf("\n");
}
Node* dele(Node* L)
{
Node* h, * s;
int x, i, j;
h = L;
x = h->data;
while (h != NULL&&h->next!=NULL)
{
if ((h->data) < (h->next->data))x = h->next->data;
h = h->next;
}
//for (i = 1, h = L; h->data == x; i++)
//    h = h->next;
if (x==L->data)
{
L = L->next;
}
for (h = L; h->next!= NULL; h = h->next)
if (x==h->next->data)
{
h->next = h->next->next;
}
return L;
}
void main()
{
Node* List = (Node*)malloc(sizeof(Node));
int num;
printf("请输入数据的个数：");
scanf_s("%d", &num);
List = create(List, num);
printf("原数据：");
display(List);
List=dele(List);
printf("删除最大值后：");
display(List);
}

``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 1月15日
• 已采纳回答 1月7日
• 修改了问题 1月6日
• 创建了问题 1月6日

#### 悬赏问题

• ¥85 3559A sensor时间同步
• ¥15 IGH主站与elmo驱动器连接时，pdo映射后无法输入输出
• ¥100 Android应用如何动态绑定邀请码
• ¥15 grbl用"!"命令停止移动后，怎么重置？
• ¥15 自己配的nginx 正向代理一直失败（相关搜索：谷歌浏览器|拒绝连接）