#题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例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;
}
}