首先我不说你的算法有什么问题,我按照我的思路给你写了一个和你的差不多的算法,看了之后,如果你用心思考的话,或许就能看出你的算法问题出在哪里,为什么会进入无限循环。

为了你能够看得更明白,我就把所有的类都给你贴上,看了之后,相信你能够看出你写的算法错误的原因。

1.节点类如下:/**

* 多项式节点

* @author zhq

*

*/

public class PolyNode {

private float coef; // 一元多项式项的系数

private int exp; // 一元多项式项的次数

private PolyNode next; // 指向下一个一元多项式结点

public PolyNode(float coef, int exp) {

this.coef = coef;

this.exp = exp;

next = null;

}

public float getCoef() {

return coef;

}

public void setCoef(float coef) {

this.coef = coef;

}

public int getExp() {

return exp;

}

public void setExp(int exp) {

this.exp = exp;

}

public PolyNode getNext() {

return next;

}

public void setNext(PolyNode next) {

this.next = next;

}

public String toString() {

return "";

}

}

2.链表类如下:

/**

* 初始化链表

* @author zhq

*

*/

public class PolyList {

private PolyNode head, newNode;

public PolyList() {

head = new PolyNode(-10001.0f, 10001);

}

// 初始化链表

public void init(float[] cvs, int[] evs) {

PolyNode currentNode = head.getNext();

for (int i = 0; i < evs.length; i++) {

newNode = new PolyNode(cvs[i], evs[i]);

if (currentNode == null) {

currentNode = newNode;

head.setNext(currentNode);

} else {

currentNode.setNext(newNode);

currentNode = newNode;

}

}

}

public PolyNode getHead() {

return head;

}

public void setHead(PolyNode head) {

this.head = head;

}

public String toString() {

StringBuilder sb = new StringBuilder();

PolyNode currentNode = head;

sb.append("(");

while (currentNode != null) {

sb.append("

+ ">");

currentNode = currentNode.getNext();

}

sb.append(")");

return sb.toString();

}

}

3.核心算法类

/**

* 核心算法类

*

* @author zhq

*

*/

public class Demo {

/**

* 时间复杂度O(n的平方),空间复杂度O(n).n是节点的总数

*

* @param pl

* 待排序的链表多项式

* @return 有序的多项式(按次数从小到大)

*/

public static PolyList listInsertSort(PolyList pl) {

PolyNode headNode = pl.getHead();

// 指向表已经排序的最后一个节点

PolyNode lastInOrder;

// 移动到适当位置的节点

PolyNode firstOutOfOrder;

// 当前节点

PolyNode current;

// 该引用变量指向current的前一个节点

PolyNode trailCurrent;

if (headNode.getNext() == null)// 链表为空

System.out.println("Cannot sort an empty list");

else if (headNode.getNext().getNext() == null) {// 链表只有一个节点

System.out.println("The list is length 1. It is already in order");

} else {// 链表多于一个节点

lastInOrder = headNode.getNext();

while (lastInOrder.getNext() != null) {

firstOutOfOrder = lastInOrder.getNext();

if (firstOutOfOrder.getExp() < lastInOrder.getExp()) {

lastInOrder.setNext(firstOutOfOrder.getNext());

firstOutOfOrder.setNext(headNode.getNext());

headNode.setNext(firstOutOfOrder);

} else {

trailCurrent = headNode;

current = headNode.getNext();

while (current.getExp() < firstOutOfOrder.getExp()) {

trailCurrent = current;

current = current.getNext();

}

if (current != firstOutOfOrder) {

lastInOrder.setNext(firstOutOfOrder.getNext());

firstOutOfOrder.setNext(current);

trailCurrent.setNext(firstOutOfOrder);

} else {

lastInOrder = lastInOrder.getNext();

}

}

}

}

return pl;

}

// 测试方法

public static void main(String[] args) {

/** 系数 */

float[] cvs = { 1, 2, 3, 5, 10 };

/** 次数 */

int[] evs = { 9, 8, 7, 10, 3 };

PolyList pl = new PolyList();

pl.init(cvs, evs);

System.out.println("排序前:" + pl);

System.out.println("排序后:" + listInsertSort(pl));

}

}

插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...相关推荐

  1. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  2. python之链表、单链表、双向链表、单向循环链表

    python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...

  3. 数据结构5: 链表(单链表)的基本操作及C语言实现

    逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...

  4. 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...

    如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候, ...

  5. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  6. python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例

    本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...

  7. php mysql 链表_浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...

  8. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  9. 线性表:3.链表,单链表详解与C语言实现

    逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为 线性表的链式存储 . 由于分散存储,为了能够体现出数据元素之间的逻 ...

最新文章

  1. spring Bean自动装配
  2. Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
  3. ubuntu18.04 mariadb start失败
  4. SD销售订单输入成本中心
  5. Flutter一切皆widget但是不要将所有东西放入一个widget
  6. 服务自动拉起,定时日志清理,数据统计的shell脚本
  7. 我的挨踢人物传之又是一年找工作时
  8. 利用Linux查找重复文件(shell脚本)
  9. 如何实现网页视频聊天?
  10. java写快递柜管理系统
  11. FHIR标准和国际基于FHIR的互联互通实践(7):国际互联互通实践
  12. Ubuntu 20.04 修改笔记本亮度
  13. [JM] 如何结合标准看JM代码(JM86)
  14. gitee提交代码到仓库
  15. google map 离线数据
  16. 国培南通之行的感悟——(其二)
  17. GParted图文磁盘分区教程
  18. 关键路径法(CPM)
  19. MySQL-日志、备份与恢复
  20. 程序员开发原谅宝,以防“老实人接盘”?

热门文章

  1. J2EE 字符 字节 编码知识概念
  2. 基于mini2440的看门狗(裸机)
  3. iReport中求和的问题
  4. LauncherApplication
  5. 【Python】raise ValueError(Too many dimensions: %d %d. % (ndim, ndmax))问题
  6. #ifdef,#else,#if,#endif (转载)
  7. Ubuntu 16.04下Caffe-SSD的应用(五)——安装VOC数据标注工具LabelImag
  8. linux普通文件的特点是,linux系统文件系统上有哪些特点
  9. uart接口_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
  10. php背景,php图片背景填充实例