【LeetCode】Remove Duplicates from Sorted List(删除排序链表中的重复元素)
这道题是LeetCode里的第83道题。
题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2 输出: 1->2示例 2:
输入: 1->1->2->3->3 输出: 1->2->3
直接遍历链表使用双指针或者使用哈希表都行,只是哈希表需要新建一个链表来返回结果,效率低。使用双指针要注意头节点的特殊性,它是没有前驱节点的。
解题代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)return head;
ListNode node = new ListNode(0);
ListNode preNode = new ListNode(0);
node = head;
preNode = node.next;
while(preNode != null) {
if(preNode.val != node.val) {
node = preNode;
preNode = node.next;
}else {
while(preNode != null && preNode.val == node.val) {
preNode = preNode.next;
}
node.next = preNode;
}
}
return head;
}
}
提交结果:
个人总结:
注意头节点的特殊性。