public class Node {
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
public Node reverse(Node head) {
Node pre = null;
Node next = null;
while (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
这段代码while循环中他是如何翻转的?想要详细一点的,debug了几次还是没弄懂具体是怎么回事
大家讲道理2017-06-23 09:15:13
参考一下,理解目的就比较好理解了。容易混乱的地方就是从右往左来处理,因为得先把后面的东西存起来,不然被覆盖掉就丢了。
pre head
+----+ +----+ +> +----+
| | | | | | |
| | | | | | |
| | | | | | |
+----+ +----+ | +----+
| | | | | | |
| | | | | | |
+----+ +-+--+ | +----+
| |
+-----+
pre head next next = head.next;
+----+ +----+ +> +----+
| | | | | | |
| | | | | | |
| | | | | | |
+----+ +----+ | +----+
| | | | | | |
| | | | | | |
+----+ +-+--+ | +----+
| |
+-----+
pre head next
+----+ <+ +----+ +----+
| | | | | | |
| | | | | | |
| | | | | | |
+----+ | +----+ +----+
| | | | | | |
| | | | | | |
+----+ | +-+--+ +----+
| | head.next = pre;
+----+
next
pre head pre = head;
+----+ <+ +----+ +----+ head = next;
| | | | | | |
| | | | | | |
| | | | | | |
+----+ | +----+ +----+
| | | | | | |
| | | | | | |
+----+ | +-+--+ +----+
| |
+----+