已知非空线性链表head,编写程序,将链表中数据域值最小的那个结点移至表的最前面。要求:不得额外申请新的结点。
- 提问者网友:十年饮冰
- 2021-04-20 16:27
- 五星知识达人网友:鱼芗
- 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这个节点!
至于你移动了那个最小节点嘛!就让它前一个节点指向它本身的下一个节点哈!