撤消链接列表(帮助)

时间:2017-08-31 21:32:11

标签: linked-list reverse singly-linked-list

所以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;

}

1 个答案:

答案 0 :(得分:0)

基本上,它们创建一个临时变量t,它保存p2指向的额外值,在p1和p2之间切换指针,然后使新的p2指向该temp变量。因为他们已经声明p2.next指向p1,所以即使p2在下一行中替换它,它也永远不会删除。

虽然它写得有些奇怪,但通常我已经看到它指针被拖曳的地方而不是它在这里显示的方式。