【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;
    }
}

提交结果:

个人总结:

注意头节点的特殊性。

posted @ 2019-04-13 13:30  1000sakura  阅读(64)  评论(0编辑  收藏