永发信息网

编程题,急求 已知非空线性链表head,编写程序,将链表中数据域值最小的那个结点移至表的最前面。要求:不得额外申请新的结点。

答案:2  悬赏:20  手机版
解决时间 2021-05-10 18:32

低端一点,不要太高级

最佳答案
这是我在以前写的代码的基础上修改的,main里完成的就是找出最小值节点然后插入表头:

#include <stdio.h>
#include <stdlib.h>

typedef struct _list {
int val;
struct _list* next;
} *node, list;

node Insert( node* head, node pos, int val )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
tmp->val = val;
tmp->next = pos ? pos->next : *head;
if ( pos ) {
pos->next = tmp;
} else {
*head = tmp;
}
return tmp;
}

node Create( int* beg, int* end )
{
node head, t;
head = t = NULL;
while ( beg != end ) {
t = Insert( &head, t, *beg++ );
}
return head;
}

void Print( node head )
{
while ( head ) {
printf( "%d ", head->val );
head = head->next;
}
putchar( '\n' );
}

int main()
{
int a[] = { 6,1,3,9,2,8,5,0,7,4 };
node head, min, prev, next;

head = Create( a, a + 10 );
Print( head );

min = prev = next = head;
while ( next->next ) {
if ( min->val > next->next->val ) {
prev = next;
min = next->next;
}
next = next->next;
}
prev->next = min->next;
min->next = head;
head = min;

Print( head );
getchar();
return 0;
}
全部回答

新建一个指针和数据变量,将第一个结点的数据赋给数据变量,然后再用它与其他结点进行比较,一旦找到比它小的就把那个结点的值赋给它,然后继续比较下去,最后得出最小结点数据的值,然后进行第二次比较,找出最小结点的所在,再把最小结点的直接前驱的next指向最小结点的直接后继,最后最小结点的next指向原来的第一个结点,并且把它的地址赋给head。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
DNF中狂战士50级最好的套装装备是什么?
请问做了人流后,多久才会来第一次月经?
牙膏能够用来洗脸吗?
CF里面怎么删人物???
说给不理解人的句子,形容心里的想法很不被人
dnf唤醒阿尔法利亚深渊打哪几个图
穿越火线启动错误
为什么我的QQ第二代密保办不了的呢?我试了四
夸女生眼睛好看的句子,和眼睛有关的诗句
要是爱上一个有男朋友的女人 但他们感情很好
冒险岛装备租赁卷和好友问题
鼻子有黑头,毛孔粗大怎么办?
为什么我刷不粉装,烁
玉溪市2010年中考准考号要怎么查?有网站最好
怎样训练狗狗捕猎,如何训练狗狗拒食跟咬手扑
推荐资讯
wow战士的天赋如何加?
郦波讲张居正第几讲他讲的流泪的啊
要怎么样学会相信一个人......
那里有要临时演员的?
梦幻 魔王寨 技能
燕郊到国贸怎么走,快捷的坐车路线?
跪求高一生物蓝色暑假答案(江苏美术出版社)
最简单又真诚的祝福,用我最真诚的祝福后半句
你有自己的游戏吗?
问问好点亮吗,怎么点亮呀@
外圆里四方(打一物)
如何用Adobe Photoshop制作流光渐变边框或者
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?