永发信息网

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

答案:3  悬赏:80  手机版
解决时间 2021-04-21 04:40
  • 提问者网友:十年饮冰
  • 2021-04-20 16:27
已知非空线性链表head,编写程序,将链表中数据域值最小的那个结点移至表的最前面。要求:不得额外申请新的结点。
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-04-20 17:16

给偶你qq


我有个c++程序 所有链表方法都实现了 增加 删除 排序 查找等等 我给你发过去你研究吧

全部回答
  • 1楼网友:迟山
  • 2021-04-20 19:38

给你写了一段带注释的代码参考。已通过编译。注意:链表的第一个元素为链表头head,第二个元素才是实际的元素。这样编程会方便点。

//移动最小节点到链表头 void MoveMinToHead(Node* head) { if(head == NULL) return;

//初始化最小的节点为第一个节点 Node* minNode = head; if(minNode->next == NULL) return;

//遍历链表,寻找最小的节点 Node* pre = minNode->next; while( pre->next != NULL) { if( minNode->next->value > pre->next->value ) minNode = pre; pre = pre->next; }

//移动最小节点到第一个节点 if( minNode != head ) { Node* firstNode = head->next; head->next = minNode->next; minNode->next = minNode->next->next; head->next->next = firstNode; } }

  • 2楼网友:夜余生
  • 2021-04-20 18:16

不申请新的节点也可以哈!

但是要用你的head哈!

首先有你的表头和一个while循环找到你的数值域最下的那个节点的前一个节点的位置!

同时将标记指针移至此节点哈!

然后用最小数据值的节点的next域来指向第一个节点!

同时做到将最小值的节点负值给head这个节点!

至于你移动了那个最小节点嘛!就让它前一个节点指向它本身的下一个节点哈!

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯