所以ListNodes真的让我感到困惑,我一直在试图理解代码片段以了解它们是如何工作的,但是我无法理解的以下反向函数尤其是while循环可以有人请向我解释。< / p>
// Definition for singly-linked list:
// class ListNode<T> {
// ListNode(T x) {
// value = x;
// }
// T value;
// ListNode<T> next;
// }
//
ListNode<Integer> reverse(ListNode<Integer> l) {
if(l==null||l.next==null)
return l;
ListNode<Integer> p1 = l;
ListNode<Integer> p2 = p1.next;
l.next = null;
while(p1!=null&& p2!=null){
ListNode<Integer> t = p2.next;
p2.next = p1;
p1 = p2;
p2 = t;
}
return p1;
}
答案 0 :(得分:0)
基本上,它们创建一个临时变量t,它保存p2指向的额外值,在p1和p2之间切换指针,然后使新的p2指向该temp变量。因为他们已经声明p2.next指向p1,所以即使p2在下一行中替换它,它也永远不会删除。
虽然它写得有些奇怪,但通常我已经看到它指针被拖曳的地方而不是它在这里显示的方式。