双向链表迭代疑问:单次while循环执行后的状态是否正确?
没问题,我帮你把内容整理成清晰的Markdown格式,顺便帮你验证第一次循环后的状态是否正确:
节点类定义
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; };
初始双向链表状态
null <- 1 <-> 2 <-> 3 <-> 4 <-> 5 -> null
第一次循环后的状态验证
咱们一步步拆解第一次循环的执行逻辑:
- 初始时
p指向节点1(list初始指向节点1) q = p.next:q被赋值为节点2(节点1原本的next)p.next = p.prev:节点1的next被设为null(因为节点1的初始prev是null)p.prev = q:节点1的prev被设为节点2list = p:list现在指向节点1p = q:p现在指向节点2
所以第一次循环后的正确状态是:
list:指向节点1,此时节点1的关系为prev=节点2,next=null,整体链表结构为null <- 1 <- 2 <-> 3 <-> 4 <-> 5 -> nullp:指向节点2q:指向节点2
你之前描述的状态有点偏差,上面是修正后的准确状态~
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

