Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反转循环双链接列表_Java_Data Structures_Linked List - Fatal编程技术网

Java 反转循环双链接列表

Java 反转循环双链接列表,java,data-structures,linked-list,Java,Data Structures,Linked List,我试图在循环双链接列表上实现一个reverse()函数 这是我的密码: public void reverseCDLL() { if (head != null) { Node current = head, next, temp; do{ next = current.getNextNode(); temp = current.getPrevNode(); current.setPre

我试图在循环双链接列表上实现一个reverse()函数

这是我的密码:

public void reverseCDLL() {

    if (head != null) {

       Node current = head, next, temp;

       do{

           next = current.getNextNode();
           temp = current.getPrevNode();
           current.setPrevNode(current.getNextNode());
           current.setNextNode(temp);
           current = next;

       }while(current != head);
    }
}
输入:
1234

输出:
1432

预期输出:
4321

我很快就要完成这件事了,但有一点是错的,我就是不能确定这是什么


任何帮助/提示都将不胜感激。

该算法运行良好,您只需将头部指针更改为正确的值即可。反转链接列表时,头部应指向最后一个节点,同样,在这种情况下,头部也应指向最后一个节点

public void reverseCDLL() {

    if (head != null) {

       Node current = head, next, temp;

       do{

           next = current.getNextNode();
           temp = current.getPrevNode();
           current.setPrevNode(current.getNextNode());
           current.setNextNode(temp);
           current = next;

       }while(current != head);
       head = head.getNextNode();
    }
}

嘿,@mathnob,你的算法是正确的,它正在反转循环链表。但是你的头仍然指向1,因此输出是
1432
。您可以最后将
头设置为
头->上一个
,它会起作用。您只需交换头和尾,然后迭代链接列表,交换每个节点的下一个和上一个引用。确保在一次完整迭代后停止此操作。@MathNoob,很抱歉应该是
头=头->下一个