如何将一个节点链插入另一节点链

晚上好,我有一个问题。我创建了一个Node类:

public class Node {
private int value;
private Node next;
private Node prev;

Node(int value) {
    this.value = value;
    this.next = null;
}

Node(int value,Node next) {
    this.value = value;
    this.next = next;
}

public int getvalue() {
    return value;
}

public void setvalue(int value) {
    this.value = value;
}

public Node getNext() {
    return next;
}

public void setNext(Node next) {
    this.next = next;
}

public void printXXX() {
    System.out.println("Node : " + this.value);
}




public boolean hasnext() {
    if(this.next != null) {
        return true;
    } else {
        return false;
    }
}

我有一个任务来打印一个新的Node链,我需要使用一个函数将一个Node链插入到中间某个位置的另一个Node链中。例如Node1[25,28,32,39,60,70] Node2[43,49,52,58],而我想让一个函数返回Node[25,43,58,70]

我在这里显示了一个代码:

public class Main {

public static void createANewChain(Node node1,Node node2) {
    boolean flag = false;
    while(node1.getNext() != null) {
        if(node1.getNext().getvalue()>node2.getvalue()) {
            node1.setNext(node2);
            flag = true;

            while (node2.getNext() != null) {
                node2 = node2.getNext();
            }

            //node2.setNext(node1.getNext()); //error
        }
            else
         {
             node1 = node1.getNext();
        }


    }

    if(flag == false) {
        while(node1.getNext() != null) {
            node1 = node1.getNext();
        }
        node1.setNext(node2);
    }


}

public static void printANewChain(Node node1) {
    while(node1.hasnext()) {
        System.out.println(node1.getvalue());
        node1 = node1.getNext();
    }
    System.out.println(node1.getvalue());
}

 public static void main(String[] args) {
    Node n6 = new Node(70);
    Node n5 = new Node(60,n6);
    Node n4 = new Node(39,n5);
    Node n3 = new Node(32,n4);
    Node n2 = new Node(28,n3);
    Node n1 = new Node(25,n2);


    Node g4 = new Node(58);
    Node g3 = new Node(52,g4);
    Node g2 = new Node(49,g3);
    Node g1 = new Node(45,g2);





    createANewChain(n1,g1);
    printANewChain(n1);

}


}

最后,我遇到了无限循环。因此,问题在于,在将第一个节点链接到第二个节点之后,我丢失了链接Node2

之后应该去的所有部分

Node1[25,39] ... [60,70]-我输了

在任务中,Node2中的所有数字都应位于Node1中两个特定数字之间的倒抽中

请帮助我找到有关如何链接其中两个节点的解决方案。我希望我能清楚地解释任务。 祝您有美好的一天,并感谢您的解决方案。

lryup 回答:如何将一个节点链插入另一节点链

比这简单。但是首先,您的函数定义不正确。您需要指定要附加到哪个节点以及要插入哪个节点,例如

void greyScale( unsigned char * src,int rows,int cols){
        for( int i = 0; i < rows; i++){
            for( int j = 0;  j < cols; j++){
                char r = src[3 * (i * cols + j)];
                char g = src[3 * (i * cols + j) + 1];
                char b = src[3 * (i * cols + j) + 2];

                char linearIntensity = (char)(0.2126f * r + 0.7512f * g + 0);

                src[3 * (i * cols + j)] = linearIntensity;
                src[3 * (i * cols + j) + 1] = linearIntensity;
                src[3 * (i * cols + j) + 2] = linearIntensity;
            }
        }
    }

然后,您需要做的是

将nodeToAppendTo上一个值(nodeToAppend.next.prev)之后的节点设置为nodeToInsert的最后一个元素,反之亦然(nodeToInsert上一个元素。next = nodeToAppendTo之后的节点,并同样设置nodeToAppendTo的最后一个元素)

然后将nodeToAppendTo.next设置为nodeToInsert,将nodeToInsert.previous设置为nodeToAppendTo

这是将一个链接列表插入另一个列表的方式。

由于我认为这是一个家庭作业问题,因此我将其留给您进行伪编码

,

谢谢您的回答,我自己就解决了这个问题,无论算法是好还是坏。

public static void createANewChain(Node node1,Node node2) {
        boolean flag = false;
        while(node1.getNext() != null) {
            if(node1.getNext().getValue()>node2.getValue()) {


                Node copy = node2;
                while (copy.getNext() != null) {
                    copy = copy.getNext();
                }

                copy.setNext(node1.getNext());

                node1.setNext(node2);

                flag = true;

                while (node2.getNext() != null) {
                    node2 = node2.getNext();
                }

            }
                else
             {
                 node1 = node1.getNext();
            }


        }

        if(flag == false) {
            while(node1.getNext() != null) {
                node1 = node1.getNext();
            }
            node1.setNext(node2);
        }


    }
本文链接:https://www.f2er.com/3033536.html

大家都在问