java翻转链表是如何实现的?

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了几次还是没弄懂具体是怎么回事

回答:

初始状态

第一次循环后

第二次循环后

第三次循环后

Ps:建议先多了解一下链表

回答:

参考一下,理解目的就比较好理解了。容易混乱的地方就是从右往左来处理,因为得先把后面的东西存起来,不然被覆盖掉就丢了。

 pre        head       

+----+ +----+ +> +----+

| | | | | | |

| | | | | | |

| | | | | | |

+----+ +----+ | +----+

| | | | | | |

| | | | | | |

+----+ +-+--+ | +----+

| |

+-----+

pre head next next = head.next;

+----+ +----+ +> +----+

| | | | | | |

| | | | | | |

| | | | | | |

+----+ +----+ | +----+

| | | | | | |

| | | | | | |

+----+ +-+--+ | +----+

| |

+-----+

pre head next

+----+ <+ +----+ +----+

| | | | | | |

| | | | | | |

| | | | | | |

+----+ | +----+ +----+

| | | | | | |

| | | | | | |

+----+ | +-+--+ +----+

| | head.next = pre;

+----+

next

pre head pre = head;

+----+ <+ +----+ +----+ head = next;

| | | | | | |

| | | | | | |

| | | | | | |

+----+ | +----+ +----+

| | | | | | |

| | | | | | |

+----+ | +-+--+ +----+

| |

+----+

以上是 java翻转链表是如何实现的? 的全部内容, 来源链接: utcz.com/p/174507.html

回到顶部