1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null) { return head; } ListNode p = head.next; ListNode result = head; ListNode tmp = head; while(p != null){ if(tmp.val != p.val){ tmp.next = p; tmp = tmp.next; } else { tmp.next = null; } p = p.next; } return result; } }
|
题目挺简单,但还是出了点问题。
在while循环中,一开始写的是
1 2 3 4 5 6 7 8 9 10
|
while(p != null){ if(tmp.val != p.val){ tmp.next = p; tmp = tmp.next; } if(tmp.val == p.val) { tmp.next = null; } p = p.next; }
|
这样写的话,在第一次循环时,先执行第一个if,tmp向后移一个节点,导致tmp与p对应同一个节点,从而第二个if也成立,造成错误。
在一次循环中,一定要保证对立条件只能成立一个。
近期评论