112. 删除排序链表中的重复元素

描述

给定一个排序链表,删除所有重复的元素每个元素只留下一个。

样例

给出 1->1->2->null,返回 1->2->null
给出 1->1->2->3->3->null,返回 1->2->3->null

代码

/**
 * Definition for ListNode
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */

public class Solution {
    /**
     * @param head: head is the head of the linked list
     * @return: head of linked list
     */
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        
        ListNode node = head;
        
        while (node.next != null) {
            if (node.val == node.next.val) {
                node.next = node.next.next;
            } else {
                node = node.next;
            }
        }
        
        return head;
    }
}

本题犯了一个常识性错误:如果 node = node.next 不写在 else 里面则 if 条件语句执行完后就会继续执行 node = node.next,换句话说就是该语句在 while 循环时无条件执行,而实际上只有在满足 node.val != node.next.val 时才应该执行该语句

你可能感兴趣的:(112. 删除排序链表中的重复元素)