早教吧作业答案频道 -->其他-->
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.已知非空线性链表的第一...的网友还看了以下:
输入一段英文字母(不少于100个字母),然后将大写换成小写,小写换成大写输出,并统计输出元音字母( 2020-06-09 …
下边一句话的意思与《论语》中的哪句话意思相近?请将课文中的那句话写在下面的横线上,并谈谈你从中收到 2020-06-10 …
实验室中有两瓶失去标签的无色溶液,已知其中一瓶是盐酸,另一瓶是氢氧化钠溶液,你有哪些方法将它们区别 2020-06-23 …
在香港,有些人将一年中2月8日写成2/8,有些人则写成8/2,这样会造成些混淆.因为当我们看到2/ 2020-06-29 …
斯塔夫里阿诺斯写到:“马克思并未将自己限制在理论上和写作上.在他的一生中,为组织和鼓励工人,他将知识 2020-11-10 …
2010年3月25日,被视为丹麦象征的“小美人鱼”铜像首次告别家乡、远赴中国亮相上海世博会,开启了中 2020-11-11 …
我是一名高中生,写议论文时只知道如何将素材写上,可是写中间的过度、开头和结尾却想不出话来,请写议论文 2020-12-23 …
以下摘自一个中学生写给心理治疗中心的来信:我们都是初三的学生,明年将参加中考。因此,我们都知道时间的 2020-12-29 …
斯塔夫里阿诺斯写到:“马克思并未将自己限制在理论上和写作上。在他的一生中,为组织和鼓励工人,他将知识 2021-01-07 …
“它诞生于白色恐怖中,如同一粒革命的火种,在沉沉黑夜的中国开始点燃,并将书写中国革命的伟大篇章”,“ 2021-01-08 …