java 交换链接列表时出现错误

ovfsdjhp  于 2023-02-14  发布在  Java
关注(0)|答案(1)|浏览(108)

这里我尝试交换一个单链表的头和尾

public void reversePI() {
        Node N1 = this.tail;
        Node Helper = this.head.next;
        this.tail = this.head;
        this.tail.next = null;
        this.head = N1;
        this.head.next = Helper;
        this.display();
    }

下面是上述函数的进一步的方法来解释我的思考方式。让我们假设我们有一个链表

4k(adress) 1(data)-->5k(adress) 2(data)-->6k(adress) 3(data)-->7k(adress) 4(data)-->null

我们有一个准则
现在当第一行执行时

N1= 7k(adress) 4(data)

Helper=5k(adress) 2(data)

this.tail=4k(adress) 1(data)

此时,列表应

5k(adress) 2(data)-->6k(adress) 3(data)-->4k(adress) 1(data)-->5k(adress) 2(data)

现在我们将tail设置为null以断开初始链接

this.tail.next = null;

5k(adress) 2(data)-->6k(adress) 3(data)-->4k(adress) 1(data)-->null

现在是这样的,头部= N1;

7k(adress) 4(data)  5k(adress) 2(data)-->6k(adress) 3(data)-->4k(adress) 1(data)-->null

之后,this.head.next= Helper;行将建立链接并

7k(adress) 4(data)--> 5k(adress) 2(data)-->6k(adress) 3(data)-->4k(adress) 1(data)-->null

我的Approch是否正确,或者我是否遗漏了什么,导致在运行display方法时生成无限输出--〉

public void display() {
            Node current = this.head;
            while (current != null) {
                System.out.print(current.data + " ");
                current = current.next;
            }
        }
z9ju0rcb

z9ju0rcb1#

你忘了处理倒数第二个节点的next,它应该指向新的tail,但是它仍然指向旧的tail,也就是新的head,这导致了一个循环:标题-〉... -〉第二个最后节点-〉标题

相关问题