Java 循环列表中4个整数的排序集

Java 循环列表中4个整数的排序集,java,singly-linked-list,circular-list,Java,Singly Linked List,Circular List,我正在玩循环链表,用它来表示多项式 以下是我到目前为止的情况: 多项式部分的类别: public class Wielomian { int wsp; int a; int b; int c; public Wielomian(){ wsp=0; a=-1; b=-1; c=-1; } public Wielomian(int wsp, int a, int b, int c){ this.wsp = wsp; this.a = a; t

我正在玩循环链表,用它来表示多项式

以下是我到目前为止的情况:

多项式部分的类别:

public class Wielomian {
int wsp;
int a;
int b;
int c;

public Wielomian(){
    wsp=0;
    a=-1;
    b=-1;
    c=-1;
}
public Wielomian(int wsp, int a, int b, int c){
    this.wsp = wsp;
    this.a = a;
    this.b = b;
    this.c = c;
}

public String toString(){
    return wsp+"(x^"+a+")(y^"+b+")(z^"+c+")";
}
}
wsp是系数,a、b、c是x、y和z的指数

节点:

public class Node {

protected Object data;

protected Node link;

public Node() {
    link = null;
    data = 0;
}    

public Node(Object d,Node n) {
    data = d;
    link = n;
}

public void setLink(Node n) {
    link = n;
}

public void setData(Object d) {
    data = d;
}    


public Node getLink() {
    return link;
}    


public Object getData() {
    return data;
}

}
名单:

class linkedList {

protected Node start ;
protected Node end ;
public int size ;


public linkedList() {
    start = null;
    end = null;
    size = 0;
}


public boolean isEmpty() {
    return start == null;
}

public int getSize() {
    return size;
}


public void insertAtStart(Object val) {

    Node nptr = new Node(val,null);
    nptr.setLink(start);
    if(start == null) {
        start = nptr;
        nptr.setLink(start);
        end = start;
    }
    else {
        end.setLink(nptr);
        start = nptr;
    }
    size++ ;
}

/* Function to insert element at end */

public void insertAtEnd(Object val) {

    Node nptr = new Node(val,null);
    nptr.setLink(start);
    if(start == null) {
        start = nptr;
        nptr.setLink(start);
        end = start;
    }
    else {
        end.setLink(nptr);
        end = nptr;
    }
    size++ ;
}

/* Function to insert element at position */

public void insertAtPos(Object val , int pos) {
    Node nptr = new Node(val,null);
    Node ptr = start;
    pos = pos - 1 ;
    for (int i = 1; i < size - 1; i++)
    {
        if (i == pos)
        {
            Node tmp = ptr.getLink() ;
            ptr.setLink( nptr );
            nptr.setLink(tmp);
            break;
        }
        ptr = ptr.getLink();
    }
    size++ ;
}

/* Function to delete element at position */

public void deleteAtPos(int pos) {
    if (size == 1 && pos == 1) {
        start = null;
        end = null;
        size = 0;
        return ;
    }
    if (pos == 1) {
        start = start.getLink();
        end.setLink(start);
        size--;
        return ;
    }
    if (pos == size) {
        Node s = start;
        Node t = start;
        while (s != end) {
            t = s;
            s = s.getLink();
        }
        end = t;
        end.setLink(start);
        size --;

        return;

    }
    Node ptr = start;
    pos = pos - 1 ;
    for (int i = 1; i < size - 1; i++) {
        if (i == pos) {
            Node tmp = ptr.getLink();
            tmp = tmp.getLink();
            ptr.setLink(tmp);
            break;
        }
        ptr = ptr.getLink();
    }
    size-- ;
}


}
类链接列表{
受保护节点启动;
受保护节点端;
公共整数大小;
公共链接列表(){
start=null;
end=null;
尺寸=0;
}
公共布尔值为空(){
返回start==null;
}
公共int getSize(){
返回大小;
}
public void insertAtStart(对象val){
Node nptr=新节点(val,null);
nptr.setLink(启动);
if(start==null){
启动=nptr;
nptr.setLink(启动);
结束=开始;
}
否则{
结束。设置链接(nptr);
启动=nptr;
}
大小++;
}
/*函数在末尾插入元素*/
公共void insertaden(对象val){
Node nptr=新节点(val,null);
nptr.setLink(启动);
if(start==null){
启动=nptr;
nptr.setLink(启动);
结束=开始;
}
否则{
结束。设置链接(nptr);
结束=nptr;
}
大小++;
}
/*函数在位置插入元素*/
公共void insertapos(对象val,int pos){
Node nptr=新节点(val,null);
节点ptr=开始;
pos=pos-1;
对于(int i=1;i
我意识到我需要另一种加法,在加法的同时对多项式的这些部分进行排序-首先是x的指数,如果2等于,那么就按y的指数,依此类推。 列表的元素将是多项式的一部分,还有一个“头”,它将链接到指数在“x”处最高的部分,多项式的最后一部分将链接到这个“头”,使整个列表循环。头部的系数将分别等于0和-1。但是我不知道如何在不破坏所有链接的情况下实现这种方法。等等。我希望你们能帮助我:)


我还想知道以后显示多项式的最佳方法。是否需要通过多项式的某些部分进行某种形式的迭代,并将它们添加到字符串中,直到我到达“head”?

您所需的行为似乎特定于您的列表元素的类
Wielomian
。在这种情况下,您应该直接使用该类,而不是假装列表可以容纳任何
对象。还请注意,添加元素时的排序在很大程度上与允许在用户指定的位置添加元素(包括特别在开始或结束处添加)不一致。您应该选择一个:要么列表保持其元素的顺序,要么它们的顺序遵循添加和删除操作的顺序。在前一种情况下,最简单的方法可能是在每次添加时搜索(已排序)列表中的正确位置,并在那里插入新节点(从而保持排序顺序)。我明白你的意思,但将“Object”更改为“Wielomian”不会有问题。然而,我仍然不知道如何实现insert方法来确定多项式的哪一部分应该被添加,或者仅仅是如何对它进行排序。这3个“instertAt”方法是示例方法,事实上,如果我想对这些元素进行排序,我甚至不需要这些方法。我只是不知道如何对链接列表中的元素进行排序。我已经告诉过你:你不需要在事后进行排序。添加列表时,只需为添加到列表中的每个元素选择正确的位置。假设列表开始排序(对于空列表来说这是非常正确的),那么它也会在每次添加之后(通过在正确位置添加元素的假设方法)和每次删除之后进行排序。