早教吧作业答案频道 -->其他-->
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-03-30 …
指数函数中若a=1时,为什么不能做到定义域到值域的一一映射? 2020-05-02 …
1.锅中煮有芝麻馅汤圆6个,花生馅汤圆5个,豆沙馅汤圆4个,这三种汤圆的外部特征完全相同.从中任意 2020-06-20 …
从以下几个论断①从映射角度看,函数使其定义域到值域的映射②函数y=x-1x∈Z且x∈(-3,3]的 2020-06-25 …
在放学回家的路上,你看到了下面一幕:一个同学正遭到几个的绑架,其中两个歹徙用刀架在那个同学的脖子上 2020-07-02 …
函数就是定义域到值域的对应关系 2020-07-25 …
给出下列四个命题:①函数就是定义域到值域的对应关系;②函数f(x)=√(x-4)+√(1-x);③ 2020-07-29 …
1函数就是定义域到值域的对应法则2若函数的定义域只含有一个元素,则值域也只含有一个元素3因fx=5 2020-08-02 …
请问以下两个命题那个是错的?1.函数是其定义域到值域的映射.2.函数y=2x(x∈N)的图像是一直线 2020-12-21 …
给出下列四种说法:①函数就是定义域到值域的对应关系;②若函数的定义域只含有一个元素,则值域也只含有一 2020-12-23 …