目的就是按照结点的exp域值排序,从小到大
1.首先是结点类如下:
[code="java"]
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;
}
}
[/code]
2.下面是链表类如下:
[code="java"]
public class PolyList {
public PolyNode head;
public PolyList() {
head = new PolyNode(-10001.0f, -10001);
}
//初始化链表
public void init(float[] cvs, int[] evs) {
PolyNode newNode, node = head;
for (int i = 0; i < evs.length; i++) {
newNode = new PolyNode(cvs[i], evs[i]);
newNode.setNext(node.getNext());
node.setNext(newNode);
node = node.getNext();
}
}
}
[/code]
3.下面是我的代码,大家帮忙看看为什么不对,谢谢了,我写了很久都不正确
[code="java"]
/**
* 多项式按exp数据域值从小到大顺序排列。
*
* @param l
*/
public static PolyList listInsertSort_PL(PolyList l) {
PolyNode p = l.head;
PolyList l2 = new PolyList();
PolyNode q = l2.head;
q.setNext(p.getNext());
//int i = 1;
while (p.getNext() != null) {
System.out.println(p.getNext().getExp() + " out");
PolyNode s = p.getNext();
while (q.getNext() != null) {
System.out.println("in " + q.getExp()+" "+s.getExp());
if (s.getExp() < q.getNext().getExp()) {
System.out.println(q.getNext().getExp()+" insert now!");
s.setNext(q.getNext());
q.setNext(s);
break;
}
System.out.println(q.getNext().getExp());
q = q.getNext();
}
q.setNext(s);
p = p.getNext();
}
return l2;
}
//测试方法
public static void main(String[] args) {
int[] evs = { 9, 8, 7 };
float[] cvs = { 1, 2, 3 };
PolyList l = new PolyList();
l.init(cvs, evs);
PolyList pls = Test04.listInsertSort_PL(l);
PolyNode pl = pls.head;
System.out.print("result : ");
while (pl.getNext() != null) {
System.out.print(pl.getNext().getExp() + " ");
pl = pl.getNext();
}
}
[/code]
请大家指教!