bobo老师您好,关于leetcode-92号问题不需要考虑空指针异常的情况吗?
来源:5-1 链表,在节点间穿针引线 Reverse Linked List
慕斯902xzxc_das
2021-12-03
这是我的代码,在遍历过程中,对循环的条件做出的限制,就是保证循环内部不会抛出NullPointerException。
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummy = new ListNode(-1,head);
ListNode prev = dummy;
int i = 1;
while ( i < left && prev.next != null ) {
prev = prev.next;
i++;
}
if(prev.next == null) return dummy.next;
ListNode curr = prev.next;
while ( i < right && curr.next != null ) {
ListNode temp = curr.next;
curr.next = temp.next;
temp.next = prev.next;
prev.next = temp;
i++;
}
return dummy.next;
}
}
这是官方的题解代码,并没有对空指针的问题进行约束,我自己在本地实测发现当left或right大于链表长度时确实会抛NullPointerException。
public ListNode reverseBetween(ListNode head, int left, int right) {
// 设置 dummyNode 是这一类问题的一般做法
ListNode dummyNode = new ListNode(-1);
dummyNode.next = head;
ListNode pre = dummyNode;
for (int i = 0; i < left - 1; i++) {
pre = pre.next;
}
ListNode cur = pre.next;
ListNode next;
for (int i = 0; i < right - left; i++) {
next = cur.next;
cur.next = next.next;
next.next = pre.next;
pre.next = next;
}
return dummyNode.next;
}
比较奇怪,为啥不需要考虑这些问题呢?
写回答
1回答
-
说明在测试用例中,没有 left 或者 right 比 n 大的情况。
这个问题后面的限制条件说明了这一点:
如果是笔试或者上机测试或者竞赛等情况,这并不是问题,拿到 ac 就好,但如果是面试的话,你的代码是更健壮的,道理上是更加分的:)
继续加油!:)
122021-12-03
相似问题