【问题标题】:Doubly linked list question. What would one iteration look like?双向链表问题。一次迭代会是什么样子?
【发布时间】:2019-07-03 04:22:13
【问题描述】:
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循环得到的,我只是想确保它是正确的。

list = null 2 3 4 5 1 null

p = null 2 3 4 5 null

q = null 2 3 4 5 null

对于格式,我很抱歉,我是在堆栈溢出中发帖的新手。

【问题讨论】:

标签: java doubly-linked-list


【解决方案1】:

您的代码实际上是在还原双向链表。

特别是在第一次迭代之后,您有以下状态:

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);
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2016-01-22
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多