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.