早教吧作业答案频道 -->其他-->
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.已知非空线性链表的第一...的网友还看了以下:
维也纳春天的三个画面阅读处全文本文依次写了表达了主要写法2阅读全文不全作者笔下维也纳的三幅画面第一 2020-04-25 …
有4筐同样重的梨取出第一筐的4分之一第二筐的12分之5第三筐取出20千克第四筐18千克这时剩下的恰 2020-04-26 …
将数字1,2,3,4,5按第一行2个数,第二行3个数的形式随机排列,设表示第i行中最小的数,a1> 2020-06-11 …
《十二铜表法》第一表有下述规定:原告传被告出庭,如被告拒绝,原告可邀请第三者作证,扭押同行;如被告 2020-06-22 …
请专家用vba帮忙按大小排序情形一:原表排序后表A列A列第1行120第1行012第2行210第2行 2020-07-18 …
在元素周期表中,对于相同主族相邻周期的两种元素原子序数之差的叙述正确的是()A.第2、3周期两元素 2020-07-21 …
将正偶数按下表排成五列,根据表中的规律,则2000排在()1.第200行第1列;2.第250行,第 2020-07-25 …
一个长方体长a厘米,宽b厘米,高c厘米,如果长宽不变,高增加5厘米,那么体积增加()立方厘米.第二 2020-07-30 …
下面的叙述不正确的是A.原子的电子层数一定等于该元素在周期表里的周期数B.第2,3周期元素若形成XY 2020-11-03 …
一张节目表上原有3个节目,如果保持这三个节目的对应顺序不变,在添进去2个新节目,有多少种安排方法?我 2020-11-23 …