应用数据结构中线性表的链式存储结构的基本运算实现删除单链表中最大结点(ElemType a[]={1,3,2,9,0,4,7,6,5,8})
注意:运行结果要求直接能在控制台输出。
遍历链表,找出最大值节点,然后删掉即可,代码如下:
C++代码:
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct _data
{
ElemType data;
struct _data* next;
}LinkNode, * LinkList;
int main()
{
ElemType a[] = { 1,3,2,9,0,4,7,6,5,8 };
LinkList head, p, t, maxnode, prenode;
int len = sizeof(a) / sizeof(int); //得到数组的大小
int i;
head = (LinkList)malloc(sizeof(LinkNode)); //创建头节点
head->next = 0;
p = head;
//用数组元素构建链表
for (i = 0; i < len; i++)
{
t = (LinkList)malloc(sizeof(LinkNode));
t->next = 0;
t->data = a[i];
//节点插入链表
p->next = t;
p = t;
}
//遍历链表找到最大节点
t = head;
p = head->next;
prenode = head;
maxnode = head->next;
while (p)
{
if (p->data > maxnode->data)
{
prenode = t;
maxnode = p;
}
// else
{
t = p;
p = p->next;
}
}
//删除
prenode->next = maxnode->next;
free(maxnode);
//遍历显示删除后的链表
p = head->next;
while (p)
{
cout << p->data<<" ";
p = p->next;
}
return 0;
}
C代码:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct _data
{
ElemType data;
struct _data* next;
}LinkNode,*LinkList;
int main()
{
ElemType a[] = { 1,3,2,9,0,4,7,6,5,8 };
LinkList head, p, t, maxnode,prenode;
int len = sizeof(a) / sizeof(int); //得到数组的大小
int i;
head = (LinkList)malloc(sizeof(LinkNode)); //创建头节点
head->next = 0;
p = head;
//用数组元素构建链表
for (i = 0; i < len; i++)
{
t = (LinkList)malloc(sizeof(LinkNode));
t->next = 0;
t->data = a[i];
//节点插入链表
p->next = t;
p = t;
}
//遍历链表找到最大节点
t = head;
p = head->next;
prenode = head;
maxnode = head->next;
while (p)
{
if (p->data > maxnode->data)
{
prenode = t;
maxnode = p;
}
//else
{
t = p;
p = p->next;
}
}
//删除
prenode->next = maxnode->next;
free(maxnode);
//遍历显示删除后的链表
p = head->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!