gpt4 book ai didi

java - 双向链表问题。一次迭代会是什么样子?

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:07 34 4
gpt4 key购买 nike

class Node {

public Node prev;
public int item;
public Node next;

public Node(Node p, int i, Node n) {
prev = p;
item = i;
next = n;
}

}

这是节点类。

这是我必须要看的。

p = list; 
while ( p != null) {
q = p.next;
p.next = p.prev;
p.prev = q;
list = p;
p = q;
};

我的节点列表最初是这样的:空 -> 1 -> 2 -> 3 -> 4 -> 5 -> 空

这就是我在 while 循环中经历了 1 次的情况,我只是想确保它是正确的。

列表 = null 2 3 4 5 1 null

p = null 2 3 4 5 null

q = null 2 3 4 5 null

我对这种格式表示歉意,我是在堆栈溢出中发帖的新手。

最佳答案

您的代码实际上正在恢复双向链表。

具体来说,在第一次迭代之后,您有以下状态:

p: null -> 2 -> 3 -> 4 -> 5 -> null
q: null -> 2 -> 3 -> 4 -> 5 -> null
list: null -> 1 -> null

以下是如何逐次查看方法迭代的状态:

class Answer {
static class Node {
int item;
Node prev;
Node next;

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

static Node of(int item) {
return new Node(item);
}

Node link(Node next) {
this.next = next;
next.prev = this;
return next;
}

@Override
public String toString() {
String res = "null -> " + this.item + " -> ";
Node node = this;
while (node != null) {
res += (node.next == null) ? "null" : (node.next.item + " -> ");
node = node.next;
}
return res;
}
}

public static void main(String[] args) {
// initialize: null -> 1 -> 2 -> 3 -> 4 -> 5 -> null
Node root = Node.of(1);
root.link(Node.of(2))
.link(Node.of(3))
.link(Node.of(4))
.link(Node.of(5));
reverse(root);
}

static void reverse(Node list) {
int iteration = 1;
Node p = list;
Node q = null;
while ( p != null) {
q = p.next;
p.next = p.prev;
p.prev = q;
list = p;
p = q;
printIteration(iteration++, p, q, list);
}
}

static void printIteration(int iteration, Node p, Node q, Node list) {
System.out.println();
System.out.println("iteration " + iteration);
System.out.println("p: " + p);
System.out.println("q: " + q);
System.out.println("list: " + list);
}
}

关于java - 双向链表问题。一次迭代会是什么样子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600652/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com