#题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例1:

输入: 1->1->2
输出: 1->2

示例2:

输入: 1->1->2->3->3
输出: 1->2->3

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list

解法

解题思路

本题考查对链表这一基础数据结构的了解,已知是一个有序的链表,那么重复的数据将会相邻排列,所以只需要判断两个相邻元素的值是否一致,一致则删除掉后一个。不一致则移动到下一个节点进行相同的判断。 删除后一个的重复元素的话不需要对整个链表的头进行任何操作,同时操作上也更加明晰。 对链表操作时需要对null指针的判断,做这个题目的时候没有考虑所以第一次提交失败了

AC代码

/**
 * 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 tempNode = head;
        while(tempNode != null && tempNode.next != null) {
            // 检查元素是否一致
            if(tempNode.val != tempNode.next.val) {
                // 向下检查
                tempNode = tempNode.next;
                continue;
            }
            // 删除重复元素,然后重新进行检查
            tempNode.next = tempNode.next.next;
        }
        return head;
    }
}