早教吧作业答案频道 -->其他-->
13.已知非空线性链表的第一个结点的指针为head,请写一个算法,将该链表中数据域值最小的结点移动到链表的最前端。编写的函数具有如下原型:voidfunc(TLinkNode*head),其中链结点的结构如
题目详情
13.已知非空线性链表的第一个结点的指针为head,请写一个算法,将该链表中数据域值最小的结点移动到链表的最前端。编写的函数具有如下原型:void func(TLinkNode *head),其中链结点的结构如下:
struct TLinkNode
{
int data;
TLinkNode *next;
}
请完成该算法。
struct TLinkNode
{
int data;
TLinkNode *next;
}
请完成该算法。
▼优质解答
答案和解析
typedef struct TLinkNode
{
int data;
TLinkNode *next;
}LinkNode;
void func(TLinkNode * &head)
{
if(head == NULL)
return;
TLinkNode *min = head;//记录最小值节点
TLinkNode *node = head;//遍历过程中的当前节点
TLinkNode *pre;//遍历过程中当前节点的前一个节点
TLinkNode *beforeMin = head;//记录最小值节点的前一个节点
while(node)
{
pre = node;
node = node->next;
if(node != NULL && node->data < min->data)
{
beforeMin = pre;
min = node;
}
}
if(min->data == head->data)
return;
if(min->next == NULL)
{
beforeMin->next = NULL;
min->next = head;
head = min;
}
else
{
beforeMin->next = min->next;
min->next = head;
head = min;
}
}
以及测试过了,可以使用
测试代码如下:
TLinkNode *p1 = new LinkNode;
p1->data = 3;
p1->next = NULL;
TLinkNode *p2 = new LinkNode;
p2->data = 2;
p2->next = p1;
TLinkNode *p3 = new LinkNode;
p3->data = 1;
p3->next = p2;
func(p3);
TLinkNode *p = p3;
while(p)
{
cout << p->data << ' ';
p = p->next;
}
变换p1,p2,p3的值,运行结果均无误
{
int data;
TLinkNode *next;
}LinkNode;
void func(TLinkNode * &head)
{
if(head == NULL)
return;
TLinkNode *min = head;//记录最小值节点
TLinkNode *node = head;//遍历过程中的当前节点
TLinkNode *pre;//遍历过程中当前节点的前一个节点
TLinkNode *beforeMin = head;//记录最小值节点的前一个节点
while(node)
{
pre = node;
node = node->next;
if(node != NULL && node->data < min->data)
{
beforeMin = pre;
min = node;
}
}
if(min->data == head->data)
return;
if(min->next == NULL)
{
beforeMin->next = NULL;
min->next = head;
head = min;
}
else
{
beforeMin->next = min->next;
min->next = head;
head = min;
}
}
以及测试过了,可以使用
测试代码如下:
TLinkNode *p1 = new LinkNode;
p1->data = 3;
p1->next = NULL;
TLinkNode *p2 = new LinkNode;
p2->data = 2;
p2->next = p1;
TLinkNode *p3 = new LinkNode;
p3->data = 1;
p3->next = p2;
func(p3);
TLinkNode *p = p3;
while(p)
{
cout << p->data << ' ';
p = p->next;
}
变换p1,p2,p3的值,运行结果均无误
看了 13.已知非空线性链表的第一...的网友还看了以下:
如图是桃花的结构和果实的结构及来源示意图,请据图回答下列问题:(“[]”中填写序号,“”内填写文字 2020-06-12 …
如图是桃花的结构和果实的结构及来源示意图,请据图回答下列问题:(“[]”中填写序号,“”内填写文字 2020-06-12 …
下列是与运动有关的结构示意图,请据图分析回答:()内填写图中代号:填写文字.(1)如图是人的关节模 2020-06-23 …
如图是人的眼球结构图:(“[]”中填写序号,横线里填写文字.)(1)正确填写有关结构的名称:无色透 2020-06-27 …
高分子聚合物P的合成路线如图:(1)写出反应所需试剂与条件.反应①;反应⑦.(2)写出反应类型.反 2020-07-21 …
已知:如图,AD=AE,∠ADC=∠AEB,BE与CD相交于O点.(1)在不添加辅助线的情况下,请 2020-08-01 …
小涛一家从广州出发,自驾游到云南昆明.轿车4小时行驶380千米,根据这一数据填写如表.时间/小时21 2020-11-13 …
如图关节结构示意图,请回答:(1)填写图中各部分结构名称.①;②;③;④;⑤(2)就你自己身体上的关 2020-11-25 …
物质的某些性质可能有利于人类,也可能不利于人类.请仿照示例填写如表.物质有利的一面(用途)不利的一面 2020-11-28 …
读图分析,根据图中A点的经纬度位置填写如表.分析内容A地经纬度东西哪个半球五带中哪一带高中低纬哪个范 2021-01-22 …