LinkedList

  • 不初始化,则cur.next不能=top
ListNode top;
ListNode cur = new ListNode(10);
cur.next = top; //不行!
  • 初始化Null的方法: ListNode top = null;
  • // 错误的程序:

          /* ListNode cur = head;
           * ListNode top = head;
           * head = head.next;
           * cur.next = top;
           * 此时因为head一直有指针指着,所以head和head.next之间的link
           * 没有断,因此形成了一个infinite loop。
          */
    
  • // 断掉Link的方法:.next=someNode; or .next = null

  • // 让node飞走的方法:不再有reference指向这个node。

  • 删除Node时,因为可能去掉的是最后一个element,loop会指向null,所以不能,仅仅判断loop.next,要将loop!=null也作为一个跳出循环的条件

  • 每当出现cur = cur.next的时候都要想想,会不会出现cur是null,或cur.next==null会影响下一轮的循环条件

              if (cur.next != null) {
                  cur = cur.next;
              }
    
  • ListNode的循环条件:一定要先判断cur2 != null,再判断cur2.next != null,也就是先确保最近的不等于null,再判断下一个,不然会出现NullPointerException。

  • 由于head和middle操作的不同,导致它们对循环条件的需求不同,这时比如这题如果只有两个数字则只判断head则不能进入这个循环,因此要给cur2.next加条件

  • head, cur2, cur1等是对reference地址的操作,他们都是object的reference;cur1.next则是对链表的操作,因为他们是object中的field的reference.