**关闭。**此题需要debugging details。目前不接受答复。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2天前关闭。
Improve this question
为什么这个代码不工作?if(head!= head.next)和(head.瓦尔!= head.next.瓦尔)在100%的情况下都有效。但我在答案中发现了一个对人有效的相同条件的代码。请帮我找出错误。
LeetCode:https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode trueResult = new ListNode(-1);
ListNode result = trueResult;
while (head != null) {
if (head != head.next) {
result.next = head;
head = head.next;
}
result = result.next;
}
return trueResult.next;
}
}
结果:head = [1,1,2,3,3] output = [1,1,2,3,3] expected = [1,2,3]
这个代码工作。为什么?
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode temp = head;
while( temp != null && temp.next != null ){
if( temp.val == temp.next.val ){
temp.next = temp.next.next;
}
else{
temp = temp.next;
}
}
return head;
}
}
if(head!= head.next)和if(head.瓦尔!= head.next.瓦尔)工作到100%情况。每次我都是一个糟糕的结果。
我尝试使用头。瓦尔!= head.next.瓦尔,但它不工作:(
2条答案
按热度按时间ryevplcw1#
你的代码中有一些问题。
1.参考文献比较
当比较
references
时,此条件始终为true
。您应该比较ListNode#val
。**a.**将校验替换为
head.val != head.next.val
。注意null
检查head.next
**B.**如果
head.next
为null,则应始终使用if
语句,因为这是最后一个元素1.您始终将
result
提前,而不将head
提前即使你遇到了重复你提前的结果,这是没有意义的。如果我们发现一个重复,我们不应该前进
result
,因为我们没有修改列表。**a.**每次迭代都需要推进
head
,而不是推进结果,即if
语句外的模式head = head.next
**B.**只有在没有重复的情况下才需要提前结果,即move
result
前进到if
语句我将所有的亮点应用到你的代码中,你可以在下面看到:
编码快乐!
rur96b6h2#
他们似乎想要这个(像):
已接受
运行时间0毫秒心跳100%
内存42.7MB,心跳7.62%